2011-11-04 47 views
1

char* string[]等效于C++中的char** string?这两个声明究竟有什么区别?内存访问速度方面最好的声明是什么?在C++中,“char * string []”是否等同于“char ** string”?

谢谢,

+4

它们是等价的,因为它们都是在C++中表示一组字符串的可怕方法。在大多数情况下,使用std :: vector Jon

+1

我认为他的问题涉及'argc',它是上述两个签名之一 –

回答

10

char * s[]是一个指针数组。 char ** s是一个指向指针的指针。数组与指针不同,所以两者不同。

(什么真的是,你可以经常把数组作为指针,其第一要素,所以没关系说在这两种情况下s[1][2]。)

注意char *s[]不上实际有效它自己的。它要么声明:

const char * s[] = { "hello", "world" }; // really `const char * s[2]` 

,或者它的功能的参数,在这种情况下,它是实际上相同char**

void foo(char * s[]); // same as `void foo(char ** s)` 
+1

它取决于上下文。如果它们是一个函数的参数,那么它们是相同的。 –

+0

@Mark:是的,已经添加了它:-) –

+0

@KerrekSB s = malloc(sizeof(char)* LEN); – obo

2

char* string[]可以衰减到char** string例如当作为参数由值传递或通过值从函数返回

两个不相同

0

它们是不同的,然而,阵列在大多数情况下衰减到指针(当由值被传递作为例如一个函数的参数)。因此,在这种情况下拍一张索引并称之为一天是完全正确的。

相关问题