c - 数组初始化程序返回什么?

标签 c arrays pointers

{ 'a', 'b', 'c' } 等数组初始化器返回什么?我的理解是使用初始化程序分配连续的内存块并将地址返回到第一个 block 。

以下代码无效:

char *char_ptr_1 = { 'a', 'b', 'c', '\0' };

另一方面,这似乎工作正常:

char char_array[] = { 'a', 'b', 'c', '\0' };
char *char_ptr_2 = char_array;

char_array 将地址存储到第一个内存块,这解释了为什么我能够将 char_array 的值分配给 chat_ptr_2。 C 是否将初始化程序返回的值转换为可以存储在指针中的值?

我确实在网上查看并找到了几个讨论数组和指针之间区别的答案,但它们对我没有帮助。

最佳答案

初始化器本身不返回任何东西。它们向编译器指示要将什么放入所声明的项目中 - 在这种情况下,它们告诉编译器将什么放入数组的元素中。

这就是为什么不能将初始化器分配给指针的原因:数组初始化器需要与数组配对才能对编译器有意义。

指针可以用指针表达式来初始化。这就是为什么在你的初始化

char *char_ptr_2 = char_array;

声明有效:编译器将 char_array 转换为指针,并用它初始化 char_ptr_2

关于c - 数组初始化程序返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23268959/

相关文章:

javascript - 如何将对象中的索引更改为值

c - scanf 更改其他字符串的值

c - 为什么我的 fork 进程的父进程 pid 与父进程自己的 pid 不同?

c++ - statm 不报告更新的 VmSize

javascript - 在不使用任何插件的情况下在 JavaScript 中将数组分组和映射为不同的格式

C++如何泛化类函数参数来处理多种类型的函数指针?

java - 在 Java 中按引用传递和在 C 中传递指针有什么区别?

c - 使用指向 struct C 的指针分配数组并返回该数组

c - 调用结构体变量的区别

c - 数组C编程中打印出奇怪的字母