我理解&用于引用对象的地址,以便&char* = char**
。无论如何要反过来这样我才能从char*
得到char**
?
所以我有:
char** str; //assigned to and memory allocated somewhere
printf ("%s", str); //here I want to print the string.
我将如何做到这一点?
答案 0 :(得分:17)
您可以使用dereference operator。
解除引用运算符对指针变量进行操作,并返回与指针地址处的值等效的l值。这称为“解除引用”指针。
char** str; //assigned to and memory allocated somewhere
printf ("%s", *str); //here I want to print the string.
答案 1 :(得分:5)
取消引用str
:
print ("%s", *str); /* assuming *str is null-terminated */
答案 2 :(得分:3)
如果你有一个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) );
虽然它在语义上等同于:
{{1}}