在下一个代码中:
char i,*p;
i = 65;
p = &i;
p = (char *) 66;
(*p)++;
printf("%d",p);
我有分段错误。我不明白为什么。我有一个指向char的指针(在本例中为char 66 = C),然后我将它的值更改为66 - 67. char的值是否“受到保护”?是否也会与其他人一起发生,除了char?
我试图了解支持这件事的想法(而不仅仅是解决它)。感谢。
答案 0 :(得分:7)
问题在于:
p = (char *) 66;
应该是:
*p = 66;
p
是指向char
的指针,因此您无法为其分配66
等值。您可以退出p
以便为指针“看起来”指定值。
如果要打印p
指向的值,则必须再次使用取消引用运算符(*
),如下所示:
printf("%d", *p); // prints the value where p points to
如果要打印指针地址,可以执行以下操作:
printf("%p", p); // prints the address where p points
答案 1 :(得分:1)
字符指针不存储字符,它存储可以找到字符的地址。所以
p = (char *)66;
说p指向66号地址,可以找到一个字符。可能的情况是你的程序甚至无法访问地址,更不用说它存储一个角色了。