C指针行为,第二卷

时间:2015-04-24 00:02:42

标签: c pointers

看看这个:

int main() {

char *verse = "zappa";
printf("%c\n", *verse);
// the program correctly prints the first character

*verse++;
printf("%c\n", *verse);
// the program correctly prints the second character, which in fact lies 
// in the adjacent memory cell

(*verse)++;
printf("%c\n", *verse);
// the program doesn't print anything and crashes. Why?

return 0;
}

为什么我的程序崩溃,因为我尝试增加verse指向的值?我期待像ASCII表格中的下一个字符。

2 个答案:

答案 0 :(得分:10)

此行(*verse)++;修改字符串文字。这是未定义的行为。

请注意,较早的代码行*verse++被解析为*(verse++)

答案 1 :(得分:3)

kendo.aspnetmvc.min.js指向字符串文字,您不允许修改。尝试:

verse

现在您的代码将起作用,因为char verse1[] = "zappa"; char *verse = verse1; 是一个可修改的字符串。

请注意,verse1实际上仅相当于*verse++。间接返回指针在增量之前指向的值,但由于你没有对表达式的返回值做任何事情,所以间接并没有真正做任何事情。