您的位置 首页 IC

C言语教程之函数指针变量与指针函数的差异(下篇)

C语言教程之函数指针变量与指针函数的区别(下篇)-z=(*pfun)(x,y); //调用函数指针变量,实参x和y的值传递给形参a和b
printf(“max=%dn”,z); //形参a和b的值发生交换存储在max函数存储区,因为pfun指针变量指向函数max首地址

/*********************************************************************************************

留意:函数指针变量与指针函数的差异:

函数指针:指向函数的指针变量

指针函数:回来指针也便是地址的函数他们侧重点不一样

**********************************************************************************************/

C言语教程之函数指针变量与指针函数的差异(下篇)

//函数指针变量

#if 0

int max(int a,int b)

{

if( a 》 b ) return a;

else return b;

}

void main(void)

{

int x,y,z;

int ( *pfun )(int,int); //界说函数指针变量

ser_init();

printf(“input two numbers:n”);

scanf(“%d%d”,&x,&y);

pfun = max; //把函数名(函数进口地址)赋给函数指针变量

z=(*pfun)(x,y); //调用函数指针变量,实参x和y的值传递给形参a和b

printf(“max=%dn”,z); //形参a和b的值产生交流存储在max函数存储区,由于pfun指针变量指向函数max首地址

} //所以z获得max函数的最大值

#endif

//——————————————————————————————–

#if 0

//回来指针的函数,函数回来值为地址

char *day(int n)

{

staTIc char *weekday[ ]={ //指针数组由指针元素组成

“Illegal day”,

“Monday”,

“Tuesday”,

“Wednesday”,

“Thursday”,

“Friday”,

“Saturday”,

“Sunday”

};

if( n《0||n》6) return weekday[0] ; //回来指针元素也便是地址

else return weekday[n];

}

void main(void)

{

while(1)

{

if(!bflag)

{

int i;

// char *day(int n); //指针函数声明

ser_init();

printf(“input No.:n”);

scanf(“%d”,&i);

printf(“Num=%d—》Day=%sn”,i,day(i));

bflag = 1;

}

}

}

#endif

//———————————————————————————

#if 0

void main(void)

{

char string[]=“I love you!”; //字符数组拜访字符串

ser_init();

printf(“string = %s”,string);

}

void main(void)

{

char *string=“I love you! my baby”; //字符指针变量拜访字符串

ser_init();

printf(“string = %s”,string);

}

#endif

//———————————————————————————

#if 0

//挑选法排序(由小到大排序)

void SelectSort(char *name[],int n) //形参指针数组—由指向字符的指针元素组成

{

int i,j,k; //k为中心变量,暂存下标号

char *ps; //中心指针变量,暂存值

for(i=0;i { // x0 x1 x2 x3 。。.x(n-1) x(n)

k = i; //从下标0开端挑选一个数,然后在后边的序列里比较,

//如果有小于前面的那个数就交流下标号

for(j=i+1;j {

if(strcmp(name[k],name[j])》0 ) k=j;

}

if(k!=i)

{ //后边序列有大于前面那个数

ps=name[i]; //name[]中的元素为指针地址

name[i]=name[k];

name[k]=ps;

}

}

}

void print(char *name[],int n)

{

int i;

for(i=0;i}

void main(void)

{

while(1)

{

if(!bflag)

{

int n;

staTIc char *name[]={“CHINA”,“AMERICAN”,“ENGLANGD”,“JANPANESE”,“GERMANY”,“FRANCE”,“AUSTRALIAN”};

//界说指针数组:数组中的每个元素为一个指针

n=7;

ser_init();

SelectSort(name,n); //指针数组的首地址传递给形参变量

print(name,n);

printf(“%c”,*name[0]);

bflag = 1;

}

}

}

#endif

//—————————————————————————————-

#if 0

//挑选法排序(由小到大排序)

void SelectSort(int *name[],int n) //形参指针数组—由指向字符的指针元素组成

{

int i,j,k; //k为中心变量,暂存下标号

int *ps; //中心指针变量,暂存值

for(i=0;i { // x0 x1 x2 x3 。。.x(n-1) x(n)

k = i; //从下标0开端挑选一个数,然后在后边的序列里比较,

//如果有小于前面的那个数就交流下标号

for(j=i+1;j {

// if( strcmp(name[k],name[j]) 》 0 ) k=j;

}

if(k!=i)

{ //后边序列有大于前面那个数

ps=name[i]; //name[]中的元素为指针地址

name[i]=name[k];

name[k]=ps;

}

}

}

void print(int *name[],int n)

{

int i;

for(i=0;i}

void main(void)

{

while(1)

{

if(!bflag)

{

int n;

staTIc int *name[]={11,22,33,44,55,66};

//name[0]=0xaa;

//name[1]=0xbb;

//name[2]=0xcc;

//name[3]=0xdd;

//name[4]=0xee;

//name[5]=0xff;

//界说指针数组:数组中的每个元素为一个指针

n=20;

ser_init();

SelectSort(name,n); //指针数组的首地址传递给形参变量

print(name,n);

bflag = 1;

}

}

}

#endif

//—————————————————————————————

#if 0

//指向指针变量的指针变量

void main(void)

{

while(1)

{

if(!bflag)

{

int x,*p,**pp; //pp为 指向整型的指针变量 的指针变量

ser_init();

printf(“input one number:n”);

scanf(“%d”,&x);

p=&x;

// p=&x;

pp=&p;

// q=&x;

printf(“%dn”,*p); //变量x的值

printf(“%dn”,**pp); //变量x的值

bflag=1;

}

}

}

#endif

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/102167.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部