相关疑难解决方法(0)

"int*nums = {5,2,1,4}"会导致分段错误

int *nums = {5, 2, 1, 4};
printf("%d\n", nums[0]);
Run Code Online (Sandbox Code Playgroud)

导致段错误,而

int nums[] = {5, 2, 1, 4};
printf("%d\n", nums[0]);
Run Code Online (Sandbox Code Playgroud)

没有.现在:

int *nums = {5, 2, 1, 4};
printf("%d\n", nums);
Run Code Online (Sandbox Code Playgroud)

打印5.

基于此,我猜想数组初始化符号{}会盲目地将这些数据加载到左边的任何变量中.当它是int []时,数组将根据需要填充.当它是int*时,指针被填满5,并且存储指针之后的存储器位置被填充为2,1和4.因此nums [0]尝试deref 5,导致段错误.

如果我错了,请纠正我.如果我是正确的,请详细说明,因为我不明白为什么数组初始化程序按照它们的方式工作.

c arrays pointers

81
推荐指数
5
解决办法
4928
查看次数

标签 统计

arrays ×1

c ×1

pointers ×1