【发布时间】:2018-01-25 18:34:56
【问题描述】:
#include<stdio.h>
int main(void)
{
char s='a',*j;
j=&s;
*j='b';
printf("s is %c",s);
}
输出: s 是 b。
从这个程序我们得到,我们可以通过改变指针的值来改变分配给常量 char 的值。
但以下程序不会发生这种情况。
#include<stdio.h>
int main(void)
{
char *p="Hello";
*p='z'; //By assuming that it should change 'H' as *p points to address of H//
printf("%c",*p);
}
输出:Segmentation Fault Core dumped
即使在这种情况下,Hello 中第 0 个字符的值也不应该在我们操作它的指针时发生变化,*p 是否指向 H 地址处的值。此处预期的输出是否应该是“zello”。
【问题讨论】:
-
您正在尝试更改字符串文字。这有着悠久的历史。在许多较旧的 c 编译器中,这是错误地允许的。出于向后兼容性的原因,某些编译器仍将允许它。但显然你的不是