Концепция инициализации указателя в C - PullRequest
0 голосов
/ 16 декабря 2018

Почему это ошибочно?

char *p;   
*p='a';

В книге сказано только - использование неинициализированного указателя.Пожалуйста, кто-нибудь может объяснить, как это?

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Указатель не инициализирован, т. Е. Не указывает на выделенный вами объект.

char c;
char *p = &c;
*p = 'c';

Или

char *p = malloc(1);
*p = 'c';
0 голосов
/ 16 декабря 2018
char *c; //a pointer variable is being declared 
*c='a';

вы использовали оператор разыменования для доступа к значению переменной, на которую указывает c, но переменная-указатель c не указывает ни на какую переменную, поэтому у вас возникают проблемы во время выполнения.

char *c; //declaration of the pointer variable
char var; 
c=&var; //now the pointer variable c points to variable var.
*c='a'; //value of var is set to 'a' using pointer 
printf("%c",var); //will print 'a' to the console

Надеюсь, это помогло.

0 голосов
/ 16 декабря 2018

Да, это может вызвать ошибку во время выполнения, поскольку неопределенное поведение .Переменная-указатель определена (но не правильно инициализирована в допустимом месте в памяти), но для ее установки требуется выделение памяти.

char *p;
p = malloc(sizeof(char));
*p = 'a';

Она будет работать при успешном выполнении malloc.Пожалуйста, попробуйте.

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