只是想真正了解 C 中的数组和指针以及它们之间的区别,并且在使用二维数组时遇到了一些麻烦。
对于普通的一维数组,这是我学到的:
char arr[] = "String constant";
创建一个字符数组,变量 arr
将始终表示初始化时创建的内存。
char *arr = "String constant";
创建一个指向 char 的指针,该指针当前指向 char 数组“String constant”的第一个索引。指针稍后可能会指向其他地方。
char *point_arr[] = {
"one", "two","three", "four"
};
创建一个指针数组,然后指向字符数组“一”、“二”等。
我的问题
如果我们可以同时使用:
char *arr = "constant";
和
char arr[] = "constant";
那为什么我不能使用:
char **pointer_arr = {
"one", "two", "three", "four"
};
代替
char *pointer_arr[] = {
"one", "two", "three", "four"
};
如果我尝试使用 char **
,则会收到类似“标量初始值设定项中的多余元素”的错误。我可以通过使用 calloc
专门分配内存来使 char**
示例工作,但因为我不必使用 char *arr = "blah ";
。我不明白为什么有必要,所以我真的不明白它们之间的区别:
char **arr_pointer;
和
char *arr_pointer[];
非常感谢您的建议。
最佳答案
那里解释了 char []
和 char *
。同样的事情可以扩展到 char *[]
vs char **
。
关于c - 二维数组和指针 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3889289/