我一直在做的是:
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.我该怎么做?
初始化似乎对我有用,在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)
| 归档时间: |
|
| 查看次数: |
7836 次 |
| 最近记录: |