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

嵌入式技术

1368人已加入

描述

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

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

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

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

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

//函数指针变量

#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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分