c – 数组初始化器返回什么?

前端之家收集整理的这篇文章主要介绍了c – 数组初始化器返回什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
阵列初始化程序如{‘a’,’b’,’c’}返回?我的理解是,使用初始化器分配连续的内存块并将地址返回到第一个块.

以下代码不起作用:

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

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

char char_array[] = { 'a','\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&C++相关文章