c语言函数怎样用指针 c语言函数指针怎么用( 三 )


应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别 。如 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(i0) 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((n1||n7) ? name[0] : name[n]);
}
本程序是通过指针函数 , 输入一个 1 ~ 7 之间的整数 ,  输出对应的星期名 。指针数组的说明与使用一个数组的元素值为指针则是指针数组 。指针数组是一组有序的指针的集合 。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量 。
指针数组说明的一般形式为: 类型说明符 * 数组名 [ 数组长度 ]
其中类型说明符为指针值所指向的变量的类型 。例如: int *pa[3] 表示 pa 是一个指针数组,它有三个数组元素, 每个元素值都是一个指针 , 指向整型变量 。通常可用一个指针数组来指向一个二维数组 。指针数组中的每个元素被赋予二维数组每一行的首地址,因此也可理解为指向一个一维数组 。图 6—6 表示了这种关系 。
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *pa[3]={a[0],a[1],a[2]};
int *p=a[0];
main()
{
int i;
for(i=0;i3;i++)
printf("%d,%d,%d/n",a[i][2-i],*a[i],*(*(a+i)+i));
for(i=0;i3;i++)
printf("%d,%d,%d/n",*pa[i],p[i],*(p+i));
}
本例程序中,pa 是一个指针数组 , 三个元素分别指向二维数组 a 的各行 。然后用循环语句输出指定的数组元素 。其中 *a[i] 表示 i 行 0 列元素值; *(*(a+i)+i) 表示 i 行 i 列的元素值; *pa[i] 表示 i 行 0 列元素值;由于 p 与 a[0] 相同,故 p[i] 表示 0 行 i 列的值; *(p+i) 表示 0 行 i 列的值 。读者可仔细领会元素值的各种不同的表示方法 。应该注意指针数组和二维数组指针变量的区别 。这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的
C语言函数指针怎么用?有函数: int fun(int a,int b);
要定义指向该函数的指针
对比指向 int a; 的指针
int *p; p = a;
p的定义是怎么来的?
首先要保证p是一个指针类型
写下(*p),
然后 , 考虑下p的基类型,
p的基类型就是变量a的类型int
将int 放在(*p)前面就行了
int (*p);
括号可以省略,就成了 int *p;
同理
想要实现 pf = fun;
(*pf) 将pf定义为一个指针,
将fun的类型作为pf的基类型
fun相当于一个 int (int a,int b)类型的量
int (int a,int b) (*pf);
基类型中有圆括号和中括号要后移
int (*pf)(int a,int b) ;//括号不能省略
pf = fun;
调用时
(*pf)(3,4); pf(3,4)都可以
C语言调用函数指针并不是不规范c语言函数怎样用指针的问题c语言函数怎样用指针,c语言函数怎样用指针你子程序写法只能在子程序中输出正确的数据c语言函数怎样用指针,而在主函数中无法得到交换过的x和y的值 。参考程序运用指针让子程序去读写a和b的值,在子程序执行完成后 , a和b的值确实得到了交换 。

推荐阅读