2016-11-27 4 views
0

Рассмотрим следующий код:Различия между печатью указателя и без и в C99

const char* text = "hi"; 
    printf("%s\n",text); 
    printf("%p\n", &text); 
    printf("%p\n", text); 

От откуда каждый printf принимает значение он печатает?

В чем разница?

+1

Он принимает значение от аргумента :) –

+1

'& Text' является _address_ указателя, который также является указателем,' Text' является значение указателя. –

ответ

6

Итак, давайте вспомним, что указатель - это адрес памяти. text, как я подозреваю, вы знаете, указатель на первый (или 0-й, в зависимости от того, как вам нравится думать об этом) блок массива char. Оператор & является оператором «address», который возвращает адрес памяти (то есть указатель на ...), который приходит после него. Поскольку значение буквального указателя text - это своего рода данные, его нужно хранить где-то в памяти. Таким образом, &text возвращает адрес, где хранится значение text. Как это:. POINTERS!!!

+0

Спасибо, я сейчас понимаю. Верно ли, что 'text' хранится в сегменте кода' & text' в стеке? – TheLogicGuy

+0

ну, вид. Тем не менее, '& text' - это значение, которое будет храниться в стеке в качестве параметра для вызова функции' printf() ', как и любой другой параметр функции. – user3629249

+0

переменная 'text' хранится в стеке. расположение символа '& text' может быть значением в разделе .text исполняемого изображения как частью команды или может быть значением в регистре, генерируемым кодом. Какое местоположение истинно будет зависеть от основного процессора и компилятора – user3629249

Смежные вопросы