首页 百科知识 函数指针与指针函数的区别

函数指针与指针函数的区别

时间:2023-10-03 百科知识 版权反馈
【摘要】:前面已介绍过,函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针 (即地址),这种返回指针值的函数称为指针型函数。其中函数名之前加了 “*”号,表明这是一个指针型函数,即返回值是一个指针。②int*p()则不是变量说明而是函数说明,说明p是一个指针型函数,其返回值是一个指向整型量的指针,*p两边没有括号。

前面已介绍过,函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针 (即地址),这种返回指针值的函数称为指针型函数。

定义指针型函数的一般形式为:

类型说明符*函数名(形参表)

… /*函数体*/

其中函数名之前加了 “*”号,表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。

如:

int*ap(intx,inty)

… /*函数体*/

表示ap是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。

【例10.32】通过指针函数输入一个1~7之间的整数,输出对应的星期名。

main()

{inti;

char*day_name(intn);

printf("input Day No:\n");

scanf("%d",&i);

if(i<0)exit(1);

printf("Day No:%2d-->%s\n",i,day_name(i));

char*day_name(intn)

{staticchar*name[]={"Illegalday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};

return((n<1‖n>7)?name[0]:name[n]);

本例中定义了一个指针型函数day_name,它的返回值指向一个字符串。该函数中定义了一个静态指针数组name。name数组初始化赋值为8个字符串,分别表示各个星期名及出错提示。形参n表示与星期名所对应的整数。在主函数中,把输入的整数i作为实参,在printf语句中调用day_name函数,并把i值传送给形参n。day_name函数中的return语句包含一个条件表达式,n值若大于7或小于1,则把name[0]指针返回主函数,输出出错提示字符串 “Illegalday”;否则,返回主函数,输出对应的星期名。主函数中的第7行是个条件语句,其语义是,如输入为负数 (i<0),则中止程序运行,并退出程序。exit是一个库函数,exit(1)表示发生错误后退出程序,exit(0)表示正常退出。

应该特别注意的是,函数指针变量和指针型函数这两者在写法和意义上的区别。如int (*p)()和int*p()是两个完全不同的量。

①int(*p)()是一个变量说明,说明p是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p)两边的括号不能少。

②int*p()则不是变量说明而是函数说明,说明p是一个指针型函数,其返回值是一个指向整型量的指针,*p两边没有括号。作为函数说明,在括号内最好写入形式参数,这样便于与变量说明区别。

③对于指针型函数定义,int*p()只是函数头部分,一般还应该有函数体部分。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈