C语言关于指针的指针的推导

来源:百度知道 编辑:UC知道 时间:2024/06/07 22:04:52
对于指针的指针一直没有弄明白 我推导到一半推导不下去了 我知道是那里字符串那里出了问题 但是具体的概念是什么我不清楚
推导过程如下
a={1,2,3}
*p指针变量 设置一个变量i
因为p=&a[i];
所以*p=a[i];
所以*p=*(&a[i])
所以a[i]是&a[i]的指针变量
a[2]={"asd","zxc"};
**p,i;
p=a[1];
a[1]是指针变量 那现在a[1]不就是"asd"了么 那也就是p="asd" 那*p是什么???
我知道上面的 那现在a[1]不就是"asd"了么 这一步错了 但是现在的情况下a[1]等于什么??? 难道是asd 的地址?? 那&a[i]又是什么呢??? asd的地址的地址??? 假如说a[1]的起始地址是2000 也就是a[i] 那2000的地址又是什么???? 还请各位帮忙解答以下

推导是没用的,要真正知道指针的意义,
像你上面装字符串那里是错误的,
应该写成
char *a[2]={"asd","zxc"};
因为装字符串的数组,装的本来就是一个地址。所以要用指针数组。

如果你用二维指针指向这种数组就应该这样
p=arr; arr在这相当于二维的。

而arr[1]代表的是"zxc"的首址,如果你p="asd"必定是报错的。因为类型不同,一个是指针的指针(p),一个只是指针("asd")

“asd”的地址,就是a[0],而你说的&a[i],比如说&a[1],一层层来说,a[1]是"zxc"的首地址,所以&a[1]就是a[1]的地址,因为a[1]本身就是一个指针。

你要明白指针是用来存放地址的,而指针本身也是一个变量,它也有自己的地址。因此它是有个层次关系的。

以你上面为例子
a,a+1(指向)--->a[0],a[1](指向)--->"asd","zxc"

其实这个你上机试一试看看他们的地址你就会明白了。
再不明白的话,可以上网找下相关的资料看看,就会明白了。其实我也还在摸索中,一起努力。

a[2]={"asd","zxc"}; //后边是二维数组,前边是一维,怎么能赋值呢?
字符指针和字符串指针是一个意思,始终指的是数组或字符串的首地址,取*之后就是首地址的内容。记好这个就行了

没有类型就开始推导,完全不把内存结构当回事,这样的推导是不会有正确结果的

自己看:
http://zhidao.baidu.com/question/79567174.html