开发者

C: pointer of char & segmantation fault

In the next code:

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

I got segmentation fault. I didn't understand why. I have a pointer to a char (开发者_如何学Pythonin this case char 66=C), and then I change it value, which is also 66 - to 67. Are the values of char "protected" from this change? Is it happen also with others, except char?

I tried to understand the idea that stand behind this thing (and not only fix it). Thanks.


Here is the problem:

p = (char *) 66;

It should be:

*p = 66;

p is a pointer to a char, so you cannot assign values like 66 to it. You can derefernce p in order to assign values to where the pointer "looks".

If you want to print the value where p points to, you must use again the dereference operator (*) like this:

printf("%d", *p); // prints the value where p points to

If you want to print the pointer address you can do this:

printf("%p", p); // prints the address where p points


A character pointer doesn't store a character, it stores an address where a character can be found. So

p = (char *)66;

says that p points to address number 66, where a character can be found. Odds are that address isn't even accessible by your program, much less that it stores a character.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜