首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于指针的有关问题,求大神指教

2012-03-19 
关于指针的问题,求大神指教举例:int i;int * pp &i那么 *p就等价于i。那么int i;char c[10]char *pp

关于指针的问题,求大神指教
举例:
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).

热点排行