有关C语言指向指针的指针

Python08

有关C语言指向指针的指针,第1张

我就用自己的理解给你讲一下吧

指针其实就是指向一个变量的变量,具体的说,一个指针它里面保存的是一个变量的地址,而一般的变量保存的是数据,所以指针它的本质也是变量.

指向指针的指针就是一个指针它指向另外一个指针变量,它保存的是另外一个指针的地址,指向指针的指针其实和一般的指针没什么两样,只是它保存的是另一个指针,一般的指针保存的是地址,指向指针的指针访问数据时是间接访问,是通过它保存的指针来进行访问,比一般的指针多了一个中间量,它可以进行**P的运算,而一般的指针的运算为*p,

不知道我的表达能力如何???

如有不懂,请给我发消息

首先要知道两个最基础的知识点:

1、&a指向的是a的地址。

2、指针指向的是地址,和整型变量的值并不对等,也就是int *与int不对等,是不能从int转换为int *的。

知道以上两个最基础的知识点,你的问题就很简单了 。

第一个:

int *p

p=&a

是正确的。定义指针变量p,然后才将p指向变量a的地址。

第二个:

int *p

p=int* (&a)

p是指针,指向的是地址,而不是int型值,因此是错误的。

第三个:

int *p=a

不能从int转换为int *,因此是错误的。

只有第一个是正确的,后面两个都是错误的。

首先你要明白一点,数组名和指针本质上是一回事,都是地址,该数组的首地址。知道这一点后就可以活学活用了。这是c语言的精髓。

比如你定义了int

*p,a[10]并且让p=a,

这个操作叫做指针p指向了数组a,其本质是给p这个变量付了一个值,就是数组a的地址,也是a[0]的地址,也是a本身里面存储的内容。

那么要引用a[i],你可以有很多种写法,比如*(a+i),

*(p+i),

p[i],都是等效的。

p++的含义其实不是p=p+1,至少有时不是,p++的操作其实是让p指向下一个元素,也就是原来p指向的是a[0],那么现在p指向a[1]了。由于a是int类型,站4个字节,那么p++这个操作其实是让p的内容增加了4。不要问为什么,c语言就是这么规定的。如果p指向的是一个char类型,那么p++就使p的值增加1。