инициализация указателя на символ - PullRequest
3 голосов
/ 29 сентября 2010

Я натолкнулся на строку, приведенную ниже

           char *ch=(char*)3000

Я хочу знать значение этой строки .....

Ответы [ 4 ]

9 голосов
/ 29 сентября 2010

Похоже, что указателю ch назначается абсолютный адрес памяти 3000. Как правило, это очень плохая идея, если вы не работаете во встроенной системе без подкачки страниц и не знаете точно что происходит вячейка памяти 3000.

1 голос
/ 29 сентября 2010

Может быть, уместно увидеть остальную часть кода ...

Этот указатель может относиться к сегменту , в котором он находится (на процессорах Intel). В этом случае 3000 может быть просто указателем на этот сегмент, определенный ранее в программе, где у нас нет строк.

Это зависит от архитектуры системы, среды, ОС, компилятора, остального кода (и программиста ...).

0 голосов
/ 29 сентября 2010

AFAIK, 3000 - это не специальный адрес / значение, и в большинстве случаев доступ к нему приведет к ошибке сегментации или к значению мусора.

Если вы видите, что в коде, возможно, он неправильно используется вместо (void *), скажем, в случае карт, где у вас есть пары ключ-значение, результат может быть преобразован в целое число в этом случае.

0 голосов
/ 29 сентября 2010

Разве это не очевидно?

Числовое значение «3000» приводится к указателю на символ, т. Е. ch инициализируется по адресу памяти 3000 (десятичное число).

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