第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就是数组的结尾后面紧跟着的那个地址。