急 谁可以告诉我这题的结果
main() { char a; char *p=&a; *p++='a'; *p++='b'; *p++='c'; *p++='d'; *p++='\0'; printf("%s",&a); getch(); exit(); } 告诉我结果是a 还是abcd 或者是别的 并且解释一下好吗
结果是 "abcd". 但是这样写代码是标准的错误范例。 因为char a, 只有一个 char的空间。要放下"abcd"需要5个char的空间。 如果这样写,'bcd\0'四个字符会战用其他的堆栈位置,如果这些位置在堆栈中是被其他变量用到的话就有可能会使程序产生不可预期的结果。
第一个char *p = &a; 和这句话意思等同:char p[?]; 且p[0] = a; 第二个*p++='a'; 等同于int i=0; p[i] = 'a'; i++; 操作结束之后i=1; 随后*p++ = 'b'; 等同于(此时i=1); p[i] = 'b'; i++; (使得i=2) 随后*p++ = 'c'; 等同于(此时i=2); p[i] = 'c'; i++; (使得i=3) 随后*p++ = 'd'; 等同于(此时i=3); p[i] = 'd'; i++; (使得i=4) 最后*p++ = '\0'; 等同于(此时i=4); p[i] = 0; i++; (使得i=5) 最后的打印:因为a的地址就是p指针首次赋值地址,所以产生的是字符串。
很明显是abcd,首地址是字符a的地址,指针p指向a,将a的内容填为 'a',然后指针加1(指向相邻的下一个地址),然后将下一个地址内容填为'b'......将最后一个地址内容填为'\0'。最后打出的字符串就是"abcd"。