- 1.二级指针
- 2.指针数组 VS 数组指针
- 3.指针函数 VS 函数指针
1. *取内容,& 取地址。*一次,内容往前进一个,&一次,外面变量(指针)往后退一个
2.指针数组:数组里面全是指针
数组指针:一个指针,指向数组
int* a[4] 指针数组
表示:数组a中的元素都为int型指针
元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*
int (*a)[4] 数组指针
表示:指向数组a的指针
元素表示:(*a)[i]
3.最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。
3.1函数指针:指向函数的(存储空间地址的)指针
int func(int x);
int (*f)(int x);//声明一个函数指针,同上,带括号的是函数/数组指针
f = func; //将func()函数的首地址赋值给指针f
3.2 指针函数
函数的返回类型是指针类型,即返回指针的函数叫指针函数
int *test(x,y);//返回一个指向整型数据的地址指针,同上不带括号的是指针函数/数组
int *(test(x,y)); //同上
函数指针是一个指向函数的指针,本质是一个指针;
指针函数是一个返回值为指针的函数,本质是一个函数
3.3.1 一维数组与指针
int a[10];
int *p;
p = &a[0]; <==> p = a; <==> int *p = &a[0]; <==> int *p = a; //把a数组的首元素的地址赋值给指针变量p
p+1; //指向数组的下一个元素,p+1的地址实际是p+1*(sizeof(int));.注意a是数组元素的首地址,是一个指针常量
p+i <==>a+i <==>&a[i]
*(p+i) <==>*(a+i) <==>a[i]
*p++ <==> *(p++); //先拿到*p,然后再p=p+1;
(*p)++;//p指向的元素值加1,是元素值加1,内容加1,不是指针加1
3.3.2 多维数组与指针
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
a<==> a[0];//注意是a[0],不是&a[0];代表是第0行的首地址
a+1 <==>a[1];//代表第1行的首地址
a[0],a[1],a[2]都是一维数组的数组名,又是一维数组a[0]中第0列元素的地址,即&a[0][0], a[1]<==>&a[1][0]; a[2]<==>&a[2][0]
二级/三级指针
http://c.biancheng.net/cpp/html/85.html
http://blog.jobbole.com/60647/
数组指针/指针数组
https://www.cnblogs.com/Romi/archive/2012/01/10/2317898.html
http://c.biancheng.net/cpp/html/476.html