C:char&的指针分段故障

时间:2011-06-20 20:26:38

标签: c

在下一个代码中:

char i,*p;
i = 65;
p = &i;
p = (char *) 66;
(*p)++;
printf("%d",p);

我有分段错误。我不明白为什么。我有一个指向char的指针(在本例中为char 66 = C),然后我将它的值更改为66 - 67. char的值是否“受到保护”?是否也会与其他人一起发生,除了char?

我试图了解支持这件事的想法(而不仅仅是解决它)。感谢。

2 个答案:

答案 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号地址,可以找到一个字符。可能的情况是你的程序甚至无法访问地址,更不用说它存储一个角色了。