该函数中定义了一个静态指针数组 name。name 数组初始化赋值为八个字符串 , 分别表示各个星期名及出错提示 。
形参 n 表示与星期名所对应的整数 。在主函数中 , 把输入的整数 i 作为实参 , 在 printf 语句中调用 day_name 函数并把 i 值传送给形参 n。
day_name 函数中的 return 语句包含一个条件表达式 , n 值若大于 7 或小于 1 则把 name[0] 指针返回主函数输出出错提示字符串 "Illegal day"。否则返回主函数输出对应的星期名 。
主函数中的第 7 行是个条件语句 , 其语义是 , 如输入为负数 (i<0) 则中止程序运行退出程序 。exit 是一个库函数 , exit(1) 表示发生错误后退出程序 , exit(0) 表示正常退出 。
应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别 。如 int(*p)() 和 int *p() 是两个完全不同的量 。
int(*p)() 是一个变量说明 , 说明 p 是一个指向函数入口的指针变量 , 该函数的返回值是整型量 , (*p) 的两边的括号不能少 。int *p() 则不是变量说明而是函数说明 , 说明 p 是一个指针型函数 , 其返回值是一个指向整型量的指针 , *p 两边没有括号 。
作为函数说明 , 在括号内最好写入形式参数 , 这样便于与变量说明区别 。对于指针型函数定义 , int *p() 只是函数头部分 , 一般还应该有函数体部分 。
main() { int i; char *day_name(int n);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_n ame(int n) { static char *name[]={ "Illegal day","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; return((n<1||n>7) ? name[0] : name[n]);} 本程序是通过指针函数 , 输入一个 1 ~ 7 之间的整数 , 输出对应的星期名 。指针数组的说明与使用一个数组的元素值为指针则是指针数组 。
指针数组是一组有序的指针的集合 。指针数组的所有元素都必须是具 。
5.如何定义指向函数的指针一、定义一个函数指针的方法如下:
返回值类型 (* 指针变量名)([形参列表]);
1、int func(int x); /* 声明一个函数 */
2、int (*f) (int x); /* 声明一个函数指针 */
3、f=func; /* 将func函数的首地址赋给指针f */
二、函数指针的用法:
函数指针的应用:(*指针变量名)(参数列表)
如:int c=(*ptr)(a,b);/* 函数指针 的使用*/
在C语言中 , 函数本身不是变量 , 但是可以定义指向函数的指针 , 也称作函数指针 , 函数指针指向函数的入口地址 。这种类型的指针可以被赋值、存放在数组中、传递给函数以及作为函数的返回值等等 。
扩展资料:
指针函数和函数指针的区别:
1、这两个概念都是简称 , 指针函数是指返回值是指针的函数 , 即本质是一个函数 。我们知道函数都有返回类型(如果不返回值 , 则为无值型) , 只不过指针函数返回类型是某一类型的指针 。
2、返回指针的函数的用途十分广泛 。事实上 , 每一个函数 , 即使它不带有返回某种类型的指针 , 它本身都有一个入口地址 , 该地址相当于一个指针 。比如函数返回一个整型值 , 实际上也相当于返回一个指针变量的值 , 不过这时的变量是函数本身而已 , 而整个函数相当于一个“变量” 。
参考资料来源:百度百科-指针