C ++中的char* string[]
是否等同于char** string
?这两个声明之间到底有什么区别?内存访问速度方面的最佳声明是什么?
谢谢,
答案 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)
它们是不同的,但是,在大多数情况下,数组会衰减为指针(例如,当值作为参数传递给函数时)。因此,在这种情况下拍一个索引并将其称为一天是完全正常的。