C 中使用 Malloc 的数组和指针

问题描述 投票:0回答:1

我有这个有效的代码。但我对指针数组的工作原理感到困惑,你不需要初始化数组吗?这段代码怎么可能只有'&arr[i]'。其次,为什么我们不需要取消引用指针来操作存储在指针指向的位置(数组)中的数据?

int *arr = malloc(size(int)*size);
for(int i = 0; i < size; i++) {
    scanf(" %d", &arr[i]);
}

我认为您需要取消引用指针才能操作它指向的数据。所以我认为这会起作用:

int *arr = malloc(size(int)*size);
for(int i = 0; i < size; i++) {
    scanf(" %d", &*arr[i]);
}

此外,当我们尝试访问数组时。为什么 array[i] 前面的 * 不起作用?

//sums value of elements in array
while (i < size ) {
    sum += *array[i];
    i++;
}
arrays c pointers malloc
1个回答
0
投票

但是我对指针数组的工作原理感到困惑,你不需要初始化数组吗?

是的,

malloc
不提供任何初始化。 是的,这段代码做了一些初始化。它使用
scanf
将值读取到分配的内存中的所有元素中。

这段代码怎么可能只有'&arr[i]'。

Scanf
需要存储转换后的输入的 int 变量的
address
。使用
&
获取数组元素
i
的地址。

其次,为什么我们不需要取消引用指针来操作存储在指针指向的位置(数组)中的数据?

您不想操纵内容。您希望

scanf
为您做到这一点。因此您必须提供地址。

int *arr = malloc(size(int)*size);
for(int i = 0; i < size; i++) {
    scanf(" %d", &arr[i]);
}

此代码可能是非法的。

size(int)
是什么意思?

我认为您需要取消引用指针才能操作它指向的数据。所以我认为这会起作用:

见上文。您不想操纵这里的数据。

&*arr[i]
这没有道理。
&
*
相互抵消。 它与
arr[i]
相同,这会导致警告,因为您必须提供地址 -

此外,当我们尝试访问数组时。为什么 array[i] 前面的 * 不起作用?

//sums value of elements in array
while (i < size ) {
    sum += *array[i];
    i++;
}

您的数组不包含指针。它保存

int
值。无需取消引用
int
值。

您可能需要重新审视有关数组和指针的学习材料。

© www.soinside.com 2019 - 2024. All rights reserved.