在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;
- }
指针中常见优先级排序

-
相关阅读:
tomcat动静分离和负载均衡
Adobe产品2024
八股文之mysql
《数据结构、算法与应用C++语言描述》使用C++语言实现二维数组矩阵
Java 局部类访问局部变量为什么必须添加 final 关键字
Uniapp 文件选择插件 Ba-FilePicker
Docker 之 高级篇
超纯水如何除硼,除硼树脂技术分析
Python基础--PART2
大家介绍一篇学生选课系统的设计与实现
-
原文地址:https://blog.csdn.net/2301_78772787/article/details/134024131