C - 将指针分配给数组?基于四个例子

标签 c arrays pointers

假设以下代码:

#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/

相关文章:

python - 在 Python 中将数组(numpy 数据类型)转换为元组( native 数据类型)

无法使用指针为结构创建动态数组

c - C语言如何创建指向位的指针

java - 安装 libfprint 并使用 Jlibfprint 包装

c - 将表存储在不同的内存地址 - AVR XMEGA256A3BU 的 C

c - 从 Fortran 调用的 C 函数中缺少参数

c - 尝试打开文件 c 系统调用

arrays - MongoDB 数组 - 原子更新或推送元素

数组大小为零时的 C++ 内存分配行为

c++ - 指针问题