假设以下代码:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
int arrayXYZ[10];
int i;
int *pi;
int intVar;
for (i=0; i<10; i++){
arrayXYZ[i] = i;
}
pi = arrayXYZ; // Reference 1
pi++; // Reference 2
arrayXYZ++; // Reference 3
arrayXYZ = pi; // Reference 4
}
- 引用 1 是正确的:pi 指向 arrayXYZ 中的第一个元素 -> *pi = 0
- 引用2是正确的:pi点递增到的元素-> *pi = 1
- 引用文献 3 不正确:我不完全确定原因。每个整数都需要 4 位内存。因此,我们不能将数组头部的地址只增加一个?假设,我们有一个 char 数组,其 sizeof(char)=1 -> 数组的头部会指向下一个桶吗?
- 引用文献 4 不正确:我不太清楚为什么。为什么数组的头部不能指向 pi 指向的地址?
感谢所有澄清! 我是新成员,所以如果我的问题不符合 Stackoverflow 指南,请随时告诉我如何改进下一个问题!
最佳答案
arrayXYZ++;
这相当于:
arrayXYZ += 1;
相当于:
arrayXYZ = arrayXYZ + 1;
这是不允许的,因为C语言不允许。数组不能赋值给。
arrayXYZ = pi;
由于同样的原因,这失败了。数组不能赋值给。
其他赋值之所以有效,是因为您可以赋值给一个指针。
还要记住,数组和指针是不同的数据类型。在 C 语言中,为了方便起见,有些情况下数组会退化为指向其第一个元素的指针。这就是为什么这样做:
pi = arrayXYZ;
然而,这只是一个自动转换,所以你不必写:
pi = &arrayXYZ[0];
这种自动转换并不意味着数组与指针是一回事。
关于C - 将指针分配给数组?基于四个例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48647644/