最近,我需要声明一个字符串数组,所以我写下了以下语句:
const char** directories = {"cricket_batting", "cricket_bowling", "croquet", "tennis_forehand", "tennis_serve", "volleyball_smash"};
Run Code Online (Sandbox Code Playgroud)
但是,g ++向我显示了错误:
error: scalar object ‘directories’ requires one element in initializer
Run Code Online (Sandbox Code Playgroud)
所以我把声明改为:
const char* directories[] = {"cricket_batting", "cricket_bowling", "croquet", "tennis_forehand", "tennis_serve", "volleyball_smash"};
Run Code Online (Sandbox Code Playgroud)
这一次,这是对的.但我不能确切地知道之间的区别char**和char[].
= {...};
Run Code Online (Sandbox Code Playgroud)
此表单的初始化称为列表初始化.
const char**
Run Code Online (Sandbox Code Playgroud)
这种类型是"指向指针的指针const char".
const char*[]
Run Code Online (Sandbox Code Playgroud)
这种类型是"指针数组const char".
简单地说,您无法使用列表初始化初始化指针.您可以使用列表初始化初始化数组; 它使用支撑列表中的项初始化数组中的每个元素.
原因归结为你从声明中得到了什么.当你声明一个时const char**,你得到的只是一个指针对象.它是一个const char**,它是一个指向指向指针的指针const char.尽管如此,你实际拥有的只是外部指针.然后你不能将它初始化为它是一个数组,因为你只有一个指针.你究竟要在哪里存储初始化列表的元素?没有可以存储它们的指针数组.
但是,当你声明a时const char*[],你得到的是一个指针数组.数组的大小由列表的大小决定,因为您已经省略了它.
| 归档时间: |
|
| 查看次数: |
3235 次 |
| 最近记录: |