只是试图真正让我的头围绕C中的数组和指针以及它们之间的差异,并且在使用2d数组时遇到了一些麻烦.
对于普通的1D阵列,这是我所学到的:
char arr[] = "String constant";
Run Code Online (Sandbox Code Playgroud)
创建一个字符数组,变量arr
将始终表示初始化时创建的内存.
char *arr = "String constant";
Run Code Online (Sandbox Code Playgroud)
创建一个指向char的指针,该指针当前指向char数组"String constant"的第一个索引.指针可以稍后指向其他地方.
char *point_arr[] = {
"one", "two","three", "four"
};
Run Code Online (Sandbox Code Playgroud)
创建一个指针数组,然后指向char数组"one","two"等.
如果我们可以同时使用:
char *arr = "constant";
Run Code Online (Sandbox Code Playgroud)
和
char arr[] = "constant";
Run Code Online (Sandbox Code Playgroud)
那为什么我不能用:
char **pointer_arr = {
"one", "two", "three", "four"
};
Run Code Online (Sandbox Code Playgroud)
代替
char *pointer_arr[] = {
"one", "two", "three", "four"
};
Run Code Online (Sandbox Code Playgroud)
如果我尝试这char **
件事,那么我会得到一个错误,比如"标量初始化器中的多余元素".我可以char**
通过使用专门分配内存来使示例工作calloc
,但因为我没有必要这样做char *arr = "blah";
.我不明白为什么它是必要的,所以我真的不明白它们之间的区别:
char **arr_pointer;
Run Code Online (Sandbox Code Playgroud)
和
char *arr_pointer[];
Run Code Online (Sandbox Code Playgroud)
非常感谢您的建议.