#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);
}
输出:分段故障核心转储
即使在这种情况下,Hello中的第0个字符的值也会改变,因为我们正在操作它的指针,并且* p指向H的地址处的值。这里预期的输出是&#34; zello&#34 ;
答案 0 :(得分:4)
从这个程序中我们可以通过改变指针的值来改变赋值给常量char的值。
没有&#34;常数字符&#34;在你的第一个片段中。它只是一个char
类型的变量,用一些值初始化。它被分配在RW存储器中,因此您可以获取它的地址并修改内容。
在第二个片段中,您定义一个指针,并为其分配一个字符串文字的地址,该地址分配在一个内存中。不应该被写入(通常它是只读的,或者只是一个未定义的行为写入它)。