Инициализировать указатель на указатель на символ в глобальном масштабе - PullRequest
0 голосов
/ 26 августа 2010

Я занимаюсь программированием на C и мне нужна помощь с этой проблемой ..

char str[] = "Hello";
char * ptr = str;
char ** ptr2 = (char**)ptr;

У меня есть эти три строки в заголовочном файле. Первые две строки в порядке, но в третьей строке произойдет ошибка. Явно ошибка: «элемент инициализатора не является константой».

Есть ли другой способ назначения адреса от ptr до *ptr2 в глобальном масштабе? Или это невозможно достичь глобально? Я хочу, чтобы это было сделано, чтобы ptr2 могла быть обычной точкой доступа, но при необходимости можно изменить то, на что она указывает.

Ответы [ 2 ]

8 голосов
/ 26 августа 2010

Прежде всего, это:

char ** ptr2 = (char**)ptr;

Не присваивает адрес ptr ptr2. Он присваивает адрес str (содержится в ptr) ptr2 и делает вид, что его char** вместо char*, что может привести к катастрофическим результатам позже, когда вы попытаетесь его использовать. Вы, вероятно, имели в виду:

char ** ptr2 = &ptr;

Поскольку &ptr (адрес) действительно постоянен, в отличие от ptr (значение), он должен компилироваться без ошибок. Кроме того, это то, что вы действительно хотите в любом случае.

0 голосов
/ 26 августа 2010

Полагаю, вы хотите, чтобы ptr2 указывал на ptr. Это означает присвоение адреса ptr ptr2, а не *ptr2. Вы должны сделать это следующим образом:

char** ptr2 = &ptr;

Я не понимаю вашу цель. ptr также можно изменить при необходимости.

Пожалуйста, рассмотрите лучшие имена для ваших переменных.

...