C: указатель ошибки char & segmantation - PullRequest
0 голосов
/ 21 июня 2011

В следующем коде:

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

Я получил ошибку сегментации.Я не поняла почему.У меня есть указатель на символ (в данном случае символ 66 = С), а затем я изменяю его значение, которое также составляет 66 - на 67. Защищены ли значения символа от этого изменения?Это происходит также с другими, кроме char?

Я пытался понять идею, которая стоит за этой вещью (и не только исправить это).Спасибо.

Ответы [ 2 ]

7 голосов
/ 21 июня 2011

Вот проблема:

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 голос
/ 21 июня 2011

Символьный указатель не хранит символ, он хранит адрес, по которому можно найти символ. Так

p = (char *)66;

говорит, что p указывает на адрес 66, где можно найти символ. Скорее всего, адрес даже недоступен вашей программе, тем более что в нем хранится символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...