我找不到我在这里做错了什么。我想创建一个数组,其大小基于用户输入,从用户输入获取数组的数据(整数),并打印数组整数。
问题是它只打印第一个数组元素,即intArr[0]
。
int main()
{
int i, n, *intArr;
printf("Type the array size:\t");
scanf("%d", &n);
intArr = (int *)malloc(n * sizeof(int));
for (i = 0; i < n; ++i)
{
printf("Type a number\t");
scanf("%d", intArr + i);
}
printArr(intArr);
}
void printArr(int *arr)
{
int i;
for (i = 0; i < (sizeof(arr) / sizeof(*arr)); ++i)
printf("%d ", *(arr + i));
}
答案 0 :(得分:3)
arr
的类型为int*
,因此sizeof(arr)
将是sizeof(int*)
,而不是arr
中的元素数量。在您的系统sizeof(int*)
上,sizeof(int)
是相同的,结果为1,因此循环仅打印一个元素。
将元素数作为参数传递给printArr()
函数。
注意:
free()
您拥有的内容malloc()
d。malloc()
的返回值。scanf()
的返回值以确保成功。答案 1 :(得分:1)
您不能将数组作为指针传递给函数,当数组衰减成指向其第一个元素的指针时,它将丢失有关大小的信息。
将大小作为额外的显式参数传递。
答案 2 :(得分:0)
您没有将参数的数量传递给printArr()函数,并且它无法知道这一点。我会将元素的数量作为另一个参数传递。
“arr”的类型是指向整数的指针。最可能是4个字节,具体取决于计算机体系结构。 “* arr”的大小相同。
你可以尝试:
printf("%d \n", (int) sizeof(arr));
printf("%d \n", (int) sizeof(*arr));
printf("%d \n", (int) sizeof(arr) / sizeof(*arr));
并会看到这样的输出:
4
4
1
因此,您注定只执行一次打印循环。