我试图动态分配一个固定大小的整数数组,但在填充数组时会出现问题。
#include <stdio.h>
#include <stdlib.h>
#define SIZE_OF_ARRAY 5
int main(void) {
int * myArr;
myArr= (int*)malloc(SIZE_OF_ARRAY * sizeof(int));
if (myArr == NULL) {
return EXIT_FAILURE;
}
for (int i = 0;i<SIZE_OF_ARRAY;i++) {
*(myArr +1)=i;
printf("myArr[%d]= %dn", i, myArr[i]);
}
return EXIT_SUCCESS;
}
输出
myArr[0]= 0
myArr[1]= 1
myArr[2]= 0
myArr[3]= 805306368
myArr[4]= -1739194352
为什么分配只能工作到数组的第二个索引?
您不初始化数组的元素。所有分配都在此处完成对元素[1]
的分配:
*(myArr +1)=i;
用*(myArr + i) = i;
替换*(myArr +1)=i;
*(myArr +1)
是数组的元素1。您可能有意使用*(myArr +i)
。
今天太少咖啡
*(myArr +i)=i;
或
myArr[i]=i;
做的工作
是否意味着*(myArr + i) = i
(或只是myArr[i] = i
(?
在常量+1偏移的情况下,当前代码将只更改第二个元素。
第一个元素"偶然"计算为0,因为它从未分配过值,这可能会错误地支持初始断言。。