亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

深入理解C语言数组与指针的关系

C语言数组与指针的关系

本教程讲解C语言中数组与指针的关系,并演示如何使用指针访问数组元素。

在学习数组与指针的关系前,请确保已掌握以下两个主题:


数组与指针的关系

数组是一块连续的数据块。编写程序打印数组元素地址:

#include <stdio.h>
int main() {
    int x[4];
    int i;
    for(i = 0; i < 4; ++i) {
        printf("&x[%d] = %p\n", i, &x[i]);
    }
    printf("Address of array x: %p", x);
    return 0;
}

输出

&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
Address of array x: 1450734448

数组 x 相邻元素相差 4 字节,因为 int 类型在编译器中占 4 字节。

注意 &x[0] 和 x 的地址相同,因为数组名 x 指向首元素。

深入理解C语言数组与指针的关系

由此可知 &x[0] 等价于 x,x[0] 等价于 *x。

同理:


示例 1:指针与数组

#include <stdio.h>
int main() {
    int i, x[6], sum = 0;
    printf("请输入 6 个数字: ");
    for(i = 0; i < 6; ++i) {
        // 等价于 scanf("%d", &x[i]);
        scanf("%d", x+i);
        // 等价于 sum += x[i]
        sum += *(x+i);
    }
    printf("Sum = %d", sum);
    return 0;
}

运行输出:

请输入 6 个数字: 2 3 4 4 12 4
Sum = 29

声明了 6 元素数组 x,使用指针访问元素。


在大多数上下文中,数组名会退化为指针。简单说,数组名被转换为指针。这就是为什么可以用指针访问数组元素。但请记住 指针和数组并不相同。

有少数情况数组名不退化为指针。详见:数组名何时不退化为指针?


示例 2:数组与指针

#include <stdio.h>
int main() {
    int x[5] = {1, 2, 3, 4, 5};
    int* ptr;
    // ptr 指向第三个元素
    ptr = &x[2];
    printf("*ptr = %d \n", *ptr); // 3
    printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
    printf("*(ptr-1) = %d", *(ptr-1)); // 2
    return 0;
}

输出:

*ptr = 3
*(ptr+1) = 4
*(ptr-1) = 2

将第三个元素地址 &x[2] 赋给指针 ptr,因此 *ptr 显示 3。*(ptr+1) 给出第四个元素,*(ptr-1) 给出第二个元素。


C语言

  1. 读懂电机电压电流不平衡:成因与排查
  2. 强化运营-维护协作,成就卓越制造绩效
  3. 钎焊与软焊关键差异全解析
  4. 二冲程与四冲程发动机核心区别深度解析
  5. SCADA 与 HMI:核心差异与工业 4.0 协同定位
  6. 直流与交流电机核心差异与选型指南
  7. 大数据与云计算:双引擎如何协同驱动业务
  8. 物联网与边缘计算如何相辅相成
  9. C++ 指针与数组:深度掌握两者关系
  10. C语言函数参数传递:地址与指针实战指南
  11. 精通C语言结构体与指针:实战指南
  12. C 语言与 Java 全方位对比:特性、历史与应用场景深度解析