关于理解数组与指针 - 主打产品 - 新余市思创暖通工贸有限公司
现在的位置: 主页 > 主打产品 > 文章正文
关于理解数组与指针
作者:新余市思创暖通工贸有限公司 来源:www.jxsichuang.com 发布时间:2017-09-07 12:35:35
关于理解数组与指针

int arr1[10]; char arr2[10]; char *parr[10];//指针数组 int(*parr1)[10]=&arr1; int *p=arr1; char *(*pparr[3])[10];//指向数组的指针数组

指向函数的指针

void fun1(char *str) { printf("%s\n",str); } void fun2(char *str) { printf("%s\n",str); } void fun3(char *str) { printf("%s\n",str); } //函数类型均相同(返回值相同,参数类型相同),这些函数可以放到指针数组里 int main() { void(*pfun1)(char *p)=fun1;//fun1赋给*pfun1这个指针 void(*pfun2)(char *p)=fun2;//fun2赋给*pfun2这个指针 void(*pfun3)(char *p)=fun3;//fun3赋给*pfun3这个指针 pfun1("fun1");//调用fun1函数 pfun1("fun2");//调用fun2函数 pfun1("fun3");//调用fun3函数 return 0; }

由于这些函数类型都相同,main函数也可这样写

int main() { void(*pfun)(char *p)=fun1;//pfun不断变化调用其他函数 pfun=fun1; pfun("fun1"); pfun=fin2; pfun("fun2"); pfun=fun3; pfun("fun3"); return 0; }

由于这些fun函数类型均相同(返回值类型和函数类型),也可用指针数组改写

int main() { void(*pfun[4](char *p)=fun1);//存放4个元素的指针数组 void(*pfunarr[4])(char*p);//pfunarr首先是一个数组,函数指针的数组 }

指向数组的指针

int fun(char*a,int*b) { return 0; } #include<stdio.h> { int (*p)(char*,int*);//函数指针 int (*pfun[10])(char*,int*);存放函数指针的数组 int(*(*q)[10])(char*,int*);//能够指向函数指针的数组的指针 //int (*(*pfun)[10])(char*,int*);//pfun指向数组,(*pfun)[10]指向函数,函数类型是 //char*,int* 指向函数指针数组的指针 q=&pfun;//指向函数指针的数组的指针,数组的每个元素也是一个指针 //int(*w)[10];//指向整形数组的指针 return 0; } 相对较复杂的指针 (*(void(*)())0)();

为函数调用,调用0作为函数地址,强制转化为指针

void(*signal(int,void(*)(int)))(int);

函数声明,函数返回值为void,参数类型为int,里面的signal指针,第一个参数为int,第二个为一个函数,返回值void,参数类型int

但是,这样写函数过于麻烦,一般用typedef来改写

int arr[10]; typedef int(*parrPtr)[10];

当不加typedef时parrPtr为数组指针变量名,重命名后为这个类型的名

parrPtr p1 = &arr;

void fun(char*c, int *i) { } //类型重命名 typedef void(*pfunPtr)(char*, int*); //调用时 pfunPtr p4 = fun; typedef void(*pfunptr2)(int); void(*signal(int, void(*)(int)))(int); 故void(*signal(int,void(*)(int)))(int);可相应改写为 1 2 3 pfunptr2 signal(int,pfunptr2); //指向这个函数的指针 pfunptr2(*pfun)(int, pfunptr2) = signal;

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网络营销 https://www.feimao666.com


  • 上一篇:Cannot modify header information - headers already
  • 下一篇:最后一页
  • 
    COPYRIGHT © 2015 新余市思创暖通工贸有限公司 ALL RIGHTS RESERVED.
    本站所有原创信息,未经许可请勿任意转载或复制使用 网站地图 技术支持:肥猫科技
    精彩专题:网站建设
    购买本站友情链接、项目合作请联系客服QQ:2500-38-100