我正在学习C编程。我想找到一个数组的中间点而不知道它的长度。如果数组的长度是6,中间点必须是第4,但我有一个错误,我不知道它是什么。这是我的代码:
int *a =(int *) malloc(sizeof(int) * n);
int i;
for( i = 0; i < sizeof(a); i++)
scanf("%d",&a[i]);
任何人都可以提供帮助,谢谢。
答案 0 :(得分:10)
scanf
正在读取一个地址,所以:
scanf("%d",a[i])
应该是:
scanf("%d", &a[i])
当你完成时,不要忘记free
记忆。 (对于像这样的微小应用程序来说无关紧要,但是当你从学习阶段走出并进入现实生活中编程时,如果你习惯它就是一个好习惯)
而且:sizeof(a)
是指针的大小,而不是指针指向的内存大小(正如在另一个答案中正确指出的那样)。
答案 1 :(得分:2)
这是错误的:for( i = 0; i < sizeof(a); i++)
。此处sizeof(a)
将返回 int
指针的大小,可能是系统上的4或8。一般情况下,不要使用sizeof
来确定数组的元素数,而是使用单独的变量。
您希望改为使用for( i = 0; i < n; i++)
。