【问题标题】:How to get char* from char**如何从 char** 中获取 char*
【发布时间】:2011-05-09 04:12:13
【问题描述】:
我知道 & 用于引用对象的地址,所以&char* = char**。有没有办法扭转这种情况,以便我可以从char** 获得char*?
所以我有:
char** str; //assigned to and memory allocated somewhere
printf ("%s", str); //here I want to print the string.
我该怎么做呢?
【问题讨论】:
标签:
c
string
pointers
char
printf
【解决方案1】:
您可以使用dereference operator。
解引用运算符对指针变量进行操作,并返回一个与指针地址处的值等价的左值。这称为“取消引用”指针。
char** str; //assigned to and memory allocated somewhere
printf ("%s", *str); //here I want to print the string.
【解决方案2】:
取消引用str:
print ("%s", *str); /* assuming *str is null-terminated */
【解决方案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) );