Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c数组中查找中间点_C_Arrays - Fatal编程技术网

在c数组中查找中间点

在c数组中查找中间点,c,arrays,C,Arrays,我在学习C编程。我想在不知道数组长度的情况下找到数组的中点。若数组的长度是6,中间点必须是第四个,但我有一个错误,我不知道它是什么。这是我的密码: int *a =(int *) malloc(sizeof(int) * n); int i; for( i = 0; i < sizeof(a); i++) scanf("%d",&a[i]); int*a=(int*)malloc(sizeof(int)*n); int i; 对于(i=

我在学习C编程。我想在不知道数组长度的情况下找到数组的中点。若数组的长度是6,中间点必须是第四个,但我有一个错误,我不知道它是什么。这是我的密码:

    int *a =(int *) malloc(sizeof(int) * n); 

    int i;
    for( i = 0; i < sizeof(a); i++)
        scanf("%d",&a[i]);
int*a=(int*)malloc(sizeof(int)*n);
int i;
对于(i=0;i

任何人都可以帮忙,谢谢。

scanf
正在读取地址,因此:

scanf("%d",a[i])
应该是:

scanf("%d", &a[i])
完成后,不要忘记释放内存。(对于像这样的小型应用程序,这并不重要,但如果您在走出学习阶段并进入实际编程阶段时习惯了它,这将是一个好习惯)

而且:
sizeof(a)
是指针的大小,而不是指针指向的分配内存的大小(如另一个答案中正确指出的)。这是错误的:
for(i=0;i
。此处
sizeof(a)
将返回
int
指针的大小,可能是系统上的4或8。通常,不要使用
sizeof
来确定数组的元素计数,而是使用单独的变量


您需要使用
来代替(i=0;i

那个么我如何知道数组的长度呢?“那个么我如何知道数组的长度呢?”您将它存储在一个单独的变量中。信不信由你,当你动态分配一块内存时,这是在C语言中实现这一点的唯一方法。投票以小字体结束(缺少
&
)@dasblinkenlight:这是肯定的。不过,对于通过数组的问题,它应该作为副本关闭,而不是因为键入错误;如果
scanf
失败,那么代码可能会尝试打印未初始化的内存,因此使用
calloc
(代替正确的错误检查)会更安全一些。我刚刚修改了它,但仍然得到了错误的结果,请help@fritzone:从注释中添加有关分配和元素计数错误的内容?因为用这种方法,它实际上甚至不试图回答这个问题。使用sizeof来确定数组的元素计数是一种很好的做法,它允许删除魔法常量。你指的是指向数组的指针。@根据我的经验,使用常规常量的重复数据消除程序总是比
((sizeof(a)/sizeof(a[0]))好得多。
-hack,特别是对于不了解数组/指针之间区别的初学者。另外,我不确定你说的“指向数组的指针”是什么意思。使用常规常量是可以的,除非您谈论的数组大小适合其初始值设定器。为了更清楚地说明我的另一点,请将其更改为指向multiple
int
,因此
int*
(我不想在不明确区分的情况下混合数据结构和C类型)