我一直在做的是:

int arr[] = {2, 3, 4};

它总是有效的。
我听说了一种更好的初始化新数组的方法,使用指针:
int *arr = {2, 3, 4};

但是,它在任何IDE中都不工作,它会抛出一些错误,如int differs in levels of indirection from inttoo many initializers。我该怎么做?

最佳答案

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

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

int arr[] = {2, 3, 4}; //array decl

前者不是初始化数组的正确方法。
对于char*,它更有意义
char* arr = "abcde"; //Pointer to a read-only char array in memory

char[] arr = "abcde"; //Normal char array

区别在于:
前者写入程序集的Rodata(常量,只读数据)部分,而后者驻留在读/写数据段中。任何改变前者的尝试都可能导致分割错误。
存储值的位置不同。
char* arr = "abcde";
arr[1] = 'f'; //(undefined behavior)

char[] arr2 = "abcde";
arr2[1] = 'f'; //no issue

10-05 20:57
查看更多