Как получить символ * от символа ** - PullRequest
4 голосов
/ 12 ноября 2010

Я понимаю, что & используется для ссылки на адрес объекта, поэтому &char* = char**. Есть ли способ изменить это, чтобы я мог получить char* от char**?

Итак, у меня есть:

char** str; //assigned to and memory allocated somewhere

printf ("%s", str); //here I want to print the string.

Как бы я поступил так?

Ответы [ 3 ]

17 голосов
/ 12 ноября 2010

Вы можете использовать оператор разыменования .

Оператор разыменования работает с переменной указателя и возвращает эквивалент значения lк значению по адресу указателя.Это называется разыменованием указателя.

char** str; //assigned to and memory allocated somewhere

printf ("%s", *str); //here I want to print the string.
5 голосов
/ 12 ноября 2010

Разыменование str:

print ("%s", *str); /* assuming *str is null-terminated */
3 голосов
/ 12 ноября 2010

Если у вас есть T* (называемый указателем на объект типа T) и вы хотите получить T (объект типа T), вы можете использовать оператор *.Он возвращает объект, указанный указателем.

В этом случае у вас есть указатель на объект типа char* (вот и все: (char*)*), поэтому вы можете использовать *.

Другим способом может быть использование оператора [], который вы используете для доступа к массивам.*s равно s[0], а s[n] равно *(s+n).

Если ваш char** s является массивом char*, с помощью printf( "%s", *str ) вы напечатаете первыйтолько.В этом случае, вероятно, легче читать, если вы используете []:

for( i = 0; i < N; ++ i ) print( "%s\n", str[i] );

Хотя это семантически эквивалентно:

 for( i = 0; i < N; ++ i ) print( "%s\n", *(str+i) );
...