1, 数组指针与指针数组
数组指针
数组指针实质上还是指针, 不同之处在于它是指向数组的, 多用于二维数组
如下例, int (p) [3]就是一个数组指针, 可以指向第二维维度为 3 的二维数组, 并给出了两种同样功能的初始化方式; p++ 后, 则由 arr[0]变为指向 arr[1]; 同时, 二维数组解引用时需要 * *
小编推荐一个学 C 语言 / C++ 的学习裙 二六三, 六八八, 二七六 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
#include int main(){ int arr[2][3] = {{1,3,5},{2,4,6}}; // int (*p)[3] = &arr[0]; int (*p)[3]; p = arr; printf("*p = %d.",*(*p)); p++; printf("*p = %d.",**p); return 0;}12345678910111213
指针数组
指针数组, 比如 int *p [3] 实质上就是定义了三个指针, 分别为 p[0],p[1],p[2], 可以将它们拿来单独使用
如下例:
#include int main(){ int i=0; int arr[3]= {1,3,5}; int *p[3] ; p[1] = &arr[0]; p[2] = &arr[1]; p[3] = &arr[2]; for (i=1; i<4; i++) printf("p[%d] = %d",i,*p[i]); return 0;}123456789101112131415
指针函数与函数指针
指针函数
本质是一个函数, 它的返回值类型是一个指针
如下例:
#include int* fun(int *a){ return a;}int main(void){ int a = 3; printf("%d", *(fun(&a))); return 0;}12345678910111213
函数指针
本质是一个指针, 这个指针指向的是一个函数
#include // 比较两个数的大小 int func (int a,int b){ if (a
其中, 定义函数指针时, 要注意类型与函数的类型一定要匹配, 比如上例, 函数是 int func (int a,int b), 其中, func 是函数名, int (int a,int b)是函数的类型名; 所以定义指向它的指针时, 类型名要一致, 也是 int (int a,int b),(*p)将 p 定义为一个指针, 根据 C 语法规则, 写为 int ( *p) (int a,int b), 其中, a,b 为形参, 不写也可以
来源: http://www.jianshu.com/p/fef1de6e2f46