在c语言中,指针常被用于应用数组,或者作为数组的元素。顾名思义,指向数组的指针常被简称为数组指针。值得注意的是,数组指针指向的数组是数组名,也是其数值中首元素的地址。
我们定义数组指针的方式如下:int (*p){n}={};(n为数组中的元素个数)
代码展示如下:
- #include
-
- int main()
- {
-
-
- int a[3][4]={{22,23,42,66},{43,54,6,788},{9,56,78,38}};
- int i,j;
- int (*p)[4];//定义一个列为4的二维数组指针
- p = a;
- for(i=0;i<3;i++)
- {
- for(j=0;j<4;j++)
- {
- printf("%d ",*(*(p+i)+j));//跟*(*(a+i)+j)输出结果一样
- }
- }
-
- return 0;
- }
其中p为二维数组首地址,*(p+i)为行的首地址,*(p+i)+j为列的首地址,*(*(p+i)+j)为i行i列的值。
指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型。指针数组中的每一个元素都存放着一个地址,就是一个指针变量。
我们定义指针数组的方式如下:int *p[n]={};(n为数组中的元素个数)
这里[ ]优先级大于*,所以p先与[ ]结合为一个数组,再与*结合为指针数组。
代码展示如下:
- #include
-
- int main()
- {
- int a=10;
- int b=20;
- int c=30;
-
- int* p[3]={&a,&b,&c};
-
- for(int i=0;i<3;i++)
- {
- printf("%d ",*p[i]);
- }
-
- return 0;
- }
如果在程序中定义了一个函数,在编译时系统会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址,即函数指针。
注意:函数名表示地址
我们定义函数指针的方式如下:int (*p)(int ,int )={};
代码展示如下:
- #include
- #include
-
- int getMax(int data1,int data2)
- {
- int max;
- max=data1>data2?data1:data2;
-
- return max;
- }
-
- int getMin(int data1,int data2)
- {
- int min;
- min=data1
-
- return min;
- }
-
- int getSum(int data1,int data2)
- {
- int sum;
- sum=data1+data2;
-
- return sum;
- }
-
- int getResult(int data1,int data2,int (*c)(int data1,int data2))
- {
- int ret;
- ret=(*c)(data1,data2);
-
- return ret;
- }
-
- int main()
- {
- int a=10;
- int b=20;
- int cmd;
- int result;
- int (*c)(int a,int b);
-
- printf("请输入1(最大值),2(最小值),3(两数之和)\n");
- scanf("%d",&cmd);
- switch(cmd)
- {
- case 1:
- c=getMax;
- break;
- case 2:
- c=getMin;
- break;
- case 3:
- c=getSum;
- break;
- default:
- puts("输入错误!");
- exit(-1);
- }
- result=getResult(a,b,c);
- printf("最终输出结果是%d\n",result);
-
- return 0;
- }
4、函数指针数组
函数指针数组顾名思义就是函数指针与指针数组的结合。
我们定义函数指针数组的方式如下:int (*p)(int ,int )={};
代码展示如下:
- #include
- #include
-
- int getMax(int data1, int data2)
- {
- return data1>data2 ? data1:data2;
- }
-
- int getMin(int data1, int data2)
- {
- return data1
- }
-
- int getSum(int data1, int data2)
- {
- return data1+data2;
- }
- int main()
- {
- int a = 10;
- int b = 20;
- int ret;
-
- int (*pfunc[3])(int , int )={
- getMin,
- getMax,
- getSum};
-
- for(int i=0;i<3;i++){
- ret = (*pfunc[i])(a,b);
- printf("ret = %d\n",ret);
- }
-
- return 0;
- }
5、指针函数
指针函数实质是一个函数。函数都有返回类型(如整型值、字符值、实型值等),只不过指针函数返回类型是某一类型的指针。
我们定义指针函数的方式如下:int *p(int ,int )={};
这里()的优先级大于*,所以p先于()结合成一个函数,再与*结合成指针函数。
代码展示如下:
- #include
-
- int* getPosPerson(int pos, int (*pstu)[4])//指针函数,返回指针的函数
- {
- int *p;
- p = (int *)(pstu+pos);//第pos行的所有数
- return p;
- }
-
- int main()
- {
- int scores[3][4]={
- {55,66,77,88},
- {66,55,99,100},
- {11,22,33,59},
- };
- int *ppos;
- int pos;
- printf("请输入你需要看的学生号数:0,1,2\n");
- scanf("%d",&pos);
-
- ppos = getPosPerson(pos, scores);
- for(int i=0;i<4;i++){
- printf("%d ",*ppos++);
- }
- return 0;
- }
指针中常见优先级排序

-
相关阅读:
【AI语言大模型】星火使用介绍
SpringCloud - Config分布式配置中心
【Ubuntu】解压 tar.xz 类型文件
mysql索引部分总结
21、Java 中接口的基本使用
Altium Designer20 批量修改元件丝印大小和位置
计算机毕设之基于Hadoop+springboot的物品租赁系统的设计与实现(前后端分离,内含源码+文档+教程)
【Mysql学习笔记】关键字顺序以及执行顺序
Excel下拉填充时,如何使得数字不递增?
Java程序设计2023-第二次上机测试
-
原文地址:https://blog.csdn.net/2301_78772787/article/details/134024131