Где хранится указатель на строку - PullRequest
1 голос
/ 24 августа 2011
void main()
{
    char *p = "hello";
}

Каков тип хранения P и где находятся точки в памяти (стек / сегмент данных)?Где хранится строка "helllo"?

Ответы [ 4 ]

5 голосов
/ 24 августа 2011

p является локальной переменной и обычно находится в стеке.

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

2 голосов
/ 24 августа 2011

Если ваша документация компилятора явно не говорит о том, что void main() является допустимой подписью, вместо этого используйте int main(void):

int main(void)
{
  char *p = "hello";
  return 0;
}

Где именно память для p и строка"hello" выделяется будет варьироваться в зависимости от реализации.Для форматов ELF и PE / COFF память для p будет находиться внутри фрейма стека для main, а память для "hello" будет находиться в сегменте данных только для чтения (.rdata для PE / COFF, .rodata для ELF).

2 голосов
/ 24 августа 2011

Строка хранится в постоянной памяти.Сам указатель хранится в стеке main.

0 голосов
/ 24 августа 2011

Ваша строка размещена в памяти, а указатель ссылается на адрес памяти, где хранится строка. Если вы вызываете этот указатель, он возвращает адрес памяти, и вы можете использовать это.

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