我有这个有效的代码。但我对指针数组的工作原理感到困惑,你不需要初始化数组吗?这段代码怎么可能只有'&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++;
}
但是我对指针数组的工作原理感到困惑,你不需要初始化数组吗?
是的,
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
值。
您可能需要重新审视有关数组和指针的学习材料。