指针数组越界

本人是C语言新手,在看书时遇到这个基础问题未能解答,请求高人指示。
char str[10];
ink k;
char *p;

p=str;
for(k=0;k<10;k++)
*p++="A"+k;

书里面说P指向数组元素str[9]的下一个内存单元,超出了数组所占用的内存区域,这是数组越界现象。
请高人解释,P是怎么指到str[9]的下一个内存单元去呢,p在什么时候改变的,希望有详细清楚的解答,谢谢。

当k = 9时,p[9] = 'A' + 9 = 'J',此后p仍进行增1操作,即指到了str[10],在数组中,str[10]是不存在的,所以越界。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-23
*p++="A"+k; 应该是*p++='A'+k;
相当于
*p = 'A' + k;
p++; // p指向下一个元素, 10次循环后p指向str[10], 超出了str数组范围.
第2个回答  2012-05-23
这个你得现在 优先级,++的优先级 要大于* 也就是说 p先进行了自加 操作,p的地址加一就是p这个类型的地址指针加一,也就是加到了str[9]的下一块内存,在取*操作 也就是对str[10]这个位置赋值了

所以说是越界了 不知道这么说 你明白么
明白了 记得给分 给最佳
第3个回答  2012-05-23
你用sizeof(str)试试,看看是多少?你就知道了,可能每个平台的结果不一样,推荐你看本书《c语言深度剖析》陈正冲写的!第87页,数组名可以表示数组的首地址,但是当其做加减运算时候情况就复杂了,比如&str+1和str+1的结果正常情况下完全不一样,你会大吃一惊的,&str+1=str+10*sizeof(char),而str+1=str+1*sizeof(char),明白了么?所以&str+1就是数组的结尾后面紧跟着的那个地址。
相似回答