ANSI C - 初始化数组

use*_*069 0 c arrays

我一直在做的是:

int arr[] = {2, 3, 4};
Run Code Online (Sandbox Code Playgroud)

它总是有效的.

我听说过使用指针初始化新数组的更好方法:

int *arr = {2, 3, 4};
Run Code Online (Sandbox Code Playgroud)

但是,它在任何IDE中都不起作用,它会抛出一些错误int differs in levels of indirection from int,或者too many initializers.我该怎么做?

Gra*_*and 5

int arr[] = {2, 3, 4};
Run Code Online (Sandbox Code Playgroud)

很好,完全正确.无需改变.


Ani*_*han 5

初始化似乎对我有用,在gcc上,但不正确.

int *arr = {2, 3, 4}; //weird behaviour, stores first value `2` as read-only

int arr[] = {2, 3, 4}; //array decl
Run Code Online (Sandbox Code Playgroud)

前者不是初始化数组的正确方法.

对于char*,它更有意义

char* arr = "abcde"; //Pointer to a read-only char array in memory

char[] arr = "abcde"; //Normal char array
Run Code Online (Sandbox Code Playgroud)

区别:

前者写入程序集的Rodata(常量,只读数据)部分,而后者则驻留在读/写数据段中.任何改变前者的尝试都可能导致分段错误.


存储值的位置不同.

char* arr = "abcde";
arr[1] = 'f'; //(undefined behavior)

char[] arr2 = "abcde";
arr2[1] = 'f'; //no issue
Run Code Online (Sandbox Code Playgroud)