急急急~~关于c语言指针的~~

来源:百度知道 编辑:UC知道 时间:2024/05/14 17:30:55
本人对指针那还真有点晕~~
p的初值为&a[0]
对于一维数组 *(p+i)或*(a+i)是指向数组的元素
p+i或a+i指的是a[i]的地址
但对于二维数组来说a+1是1行的首地址
*(a+1)是a[1][0]的地址
*(a+1)+2是a[1][2]的地址
*(*(a+1)+2)是a[1][2]的值

*不是取内容的吗?
为什么对一维数组来说*是指向元素,即取内容的
而对二维数组来说*成取地址的了??两个*成取内容的了?
那&不就没用了吗??

请高手指教(最好稍微的详细点~~)
万分感谢~~

对于数组来说,比如a[5],那么数组名a就是数组的首地址,*a和a[0]是等价的(无论你是否定义了指针)
对二维数组,比如a[3][4],那么a就是二维数组的首地址,不过我们可以这么理解,a[3][4]是(a[0])[4],(a[1])[4],(a[2])[4]这样三个数组,数组名就是a[0], a[1],a[2].这样,a和a[0]实际上虽然是一个地址,但是意义是不同的.*a=a[0], *(a+1)=a[1],*(a+2)=a[2]因为a[0],a[1],a[2]本身就是地址,所以*a自然也是地址.而*a[0]才是*a[0][0],才是一个值.*是取值,但这个值可能也是一个地址(因为地址也是值)