2016-01-19 3 views
-4

, если у вас есть простая функция, например int open(const char *path, int oflags);, вы можете передать строку непосредственно как *path, например "filename.txt. Вы также можете передать &foo (это адрес, в этом случае он может не иметь смысла). Вы можете даже поместить в него нормальный указатель.Указатель как параметр

Так что мой вопрос, на самом деле является адрес ожидается, когда у вас есть указатель в качестве параметра или является лишь некоторые данные, ожидаемые который соответствует параметру (в данном случае const char). Мне интересно, потому что вы можете без проблем проходить ascii напрямую.

Thx.

+0

Вы передаете непосредственно строку LITERAL. Это означает, что вы передаете адрес этого массива 'const char'. – LPs

ответ

2

Ожидается указатель. Строковая константа, например. "filename.txt", фактически имеет значение указателя: создается массив для хранения строки, а значение выражения - это адрес этого массива, то есть указатель на него.

+0

ах, поэтому, если вы создадите «это strin», в системе он будет создавать массив символов? Спасибо – int80

+1

Правильно. Вы можете считать это анонимным массивом 'char'. Обычно он выделяется в постоянной памяти, поэтому вы не можете изменять его содержимое, но это не похоже на 'char []'. –

+0

Правильнее было бы сказать, что тип строковых литералов - 'const char []', и он неявно распадается на указатель при передаче 'open'. – szczurcio

-1

Пример вашего примера работает, потому что в C указатели на массивы указывают на первый элемент массива. Например, в этом фрагменте кода

int arr [3] = {1,2,3};

int sum;

INT SumOfArrayElements (интермедиат * а)

{

/*

код для вычисления суммы

*/

}

сумма = SumOfArrayElements (обр);

arr - указатель на массив и указывает на arr[0].

Строки в C представляют собой массивы символов (то есть нет разницы между строками и массивами символов). Поэтому, когда вы проходите "filename.txt", компилятор читает его как указатель массива символов, который указывает на "filename.txt".

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