“char * string []”是否等同于C ++中的“char ** string”?

时间:2011-11-04 14:58:26

标签: c++ pointers char

C ++中的char* string[]是否等同于char** string?这两个声明之间到底有什么区别?内存访问速度方面的最佳声明是什么?

谢谢,

3 个答案:

答案 0 :(得分: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 :(得分:2)

char* string[]可以衰减为char** string,例如当作为参数按值传递或从函数按值返回时

两者不相同

答案 2 :(得分:0)

它们是不同的,但是,在大多数情况下,数组会衰减为指针(例如,当值作为参数传递给函数时)。因此,在这种情况下拍一个索引并将其称为一天是完全正常的。