关于指针的问题,求大神指教
举例:
int i;
int * p;
p = &i;
那么 *p就等价于i。
那么
int i;
char c[10];
char *p;
p = c;
那么p[i]等价于*(p+i)
而不是*p[i]等价于*(p+i)呢。
[解决办法]
int i;
char c[10];
char *p;
p = c;
p赋值为数组c的首地址,(p+i)就指向数组中的第i个元素,*(p+i)就是取数组中第i个元素的内容。
p[i]也是数组中第i个元素的内容,所以p[i]和*(p+i)等价。
*p[i]这个会引起编译错误,p[i]不是一个指针,不能够取内容。
[解决办法]
假如p[5]={1,2,3,4,5}
p[3]代表数组中的整数4.
*(p+3)是这样计算的:从指针P所指的内存的地址(起始地址是&p[0])向下偏移3个单位,每个单位是一个char类型的大小,这样找到的是p[3]的地址(就是&p[3]),然后通过"*"运算符得到该地址所指的值,就是4.
所以*(p+i)=p[i];
而*p[i]是非法的(比如*p[3] 相当于 *4).