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

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

注意:函数指针变量与指针函数的区别:

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

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

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

 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 numbe     rs   :n”);

s     can   f(“%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)

{

sta         TI   c 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;

sta  TI c 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;

sta  TI c 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

57
159
0
93

相关资讯

  1. 1、中国5月官方制造业PMI为50.6较上月降0.2个百分点4097
  2. 2、需要了解的Linux中电源管理接口213
  3. 3、FPGA开发流程详细解析4786
  4. 4、玩家入局,工业互联网之江湖再起2877
  5. 5、2019年德国半导体市场增长的机遇在哪?3175
  6. 6、200V单芯片驱动器LME49810的技术特点及适用范围329
  7. 7、浅谈绿光激光器的产生及其应用4109
  8. 8、LinkSwitch导致电磁兼容性问题,工程师何以解忧?988
  9. 9、对于eFPGA该如何选择2376
  10. 10、EMC传导发射测试方案4771
全部评论(0)
我也有话说
0
收藏
点赞
顶部