• 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

posted on 2018-04-09 17:02  snowdrop  阅读(217)  评论(0编辑  收藏  举报