Тип хранения строкового литерала при передаче в качестве аргумента - PullRequest
0 голосов
/ 31 августа 2011

Мне любопытно узнать строковые литералы.Я читал, что в случае чего-то подобного const char * ptr = "Hello World"; они имеют статическую длительность хранения в данных программы и не размещаются в куче или стеке.Как насчет того, когда он используется в качестве аргумента?

, например,

Function("panda");

, если определено как

void Function(const char* str)
{
...
}

, теперь "panda" также включено в данныепрограмма или она расположена в стеке?

Ответы [ 2 ]

4 голосов
/ 31 августа 2011

Везде в вашей программе, где у вас есть строковые константы, это одно и то же.В вашем примере вы просто передаете указатель на адрес, на котором хранится строка.Так что это так же, как общий случай, который вы представили.Использование его в качестве аргумента функции не имеет никакого отношения к тому, где оно хранится.

1 голос
/ 31 августа 2011

В вашем примере «panda» (обычно: определяется реализацией) хранится со статической продолжительностью в данных программы. Когда вы звоните Function("panda"), это то же самое, что и extern char* s = "panda"; Function(s);. Это становится более понятным в вашем объявлении для функции. Function не получает массив символов, он получает указатель на константные символы. Таким образом, стек содержит указатель, а не массив символов.

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