c - 二维数组和指针 - C

标签 c arrays pointers

只是想真正了解 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[];

非常感谢您的建议。

最佳答案

参见 this answer in the C FAQ :

那里解释了 char []char *。同样的事情可以扩展到 char *[] vs char **

关于c - 二维数组和指针 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3889289/

相关文章:

c - 如何在C/MIPS中找到最大和的子序列?

python - 如何检查所有给定点(空间中)是否位于同一条线上?

javascript - array.sort 按多个值排序

c - while 循环中奇怪的指针行为

c++ - C冒泡排序: Sorted array loses biggest data piece and is replaced by a memory address

c - 在进程(不是线程)中使用 semaphore.h

c++ - Bison 解析器 : making a function which is returning tokens

c++ - 为什么按下的键的 dwControlKeyState 与常量不匹配?

c - XCB:映射一次后窗口不会取消映射

c++ - 删除多个列表指向的数据?