c语言指针指向数组的问题。

2024-11-29 10:03:49
推荐回答(3个)
回答1:

首先你要明白一点,数组名和指针本质上是一回事,都是地址,该数组的首地址。知道这一点后就可以活学活用了。这是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。

回答2:

由于p是指针,所以p=a表示指向了这个数组的首元素地址,p++当然就表示指向下一个
如果要表示a[i]的话,
最常用a[i],也可以*(a+i),也可以是*(p+i)
C语言规定:表达式1[表达式2]与
*((表达式1)+(表达式2))完全等价,也可以说
a[b]与b[a]也完全等价,也就是说a[i]和i[a]也是完全等价,你可以试试

回答3:

*p
*a
p=a表示把数组的第一个地址赋值给指针p
这样指针就指向数组了
p++表示指针p地址加1
这样就指向后一个地址