详解C语言中的指针数组和数组指针

指针数组和数组指针是 C 语言中比较常见的两种类型。它们虽然名字很相似,但是含义、用法以及指向类型都不同,需要分开理解。

指针数组

指针数组是一个数组,其中每个元素都是一个指针。这些指针可以指向不同类型的数据,也可以指向相同类型的数据。例如,下面是一个包含 3 个指针的指针数组,其中每个指针指向一个整数:

复制代码
int a = 1, b = 2, c = 3;
int* ptr_array[3] = {&a, &b, &c};

上面这个指针数组 ptr_array 包含 3 个元素,每个元素都是一个指向整数的指针。这些指针分别指向变量 a、b 和 c 的地址。我们可以通过下标访问这些指针,进而访问到相应的整数:

复制代码
printf("%d %d %d\n", *(ptr_array[0]), *(ptr_array[1]), *(ptr_array[2]));

上面这行代码输出 1、2 和 3,分别对应变量 a、b 和 c 的值。

需要注意的是,指针数组中的每个元素都是一个指针,因此当我们想要使用指针数组的元素时,需要通过解引用运算符 * 来获取它所指向的值,例如上面的 *(ptr_array[0])。

数组指针

数组指针是一个指针,它指向一个数组。它也可以指向不同类型的数组,例如整数数组、字符数组等。我们可以使用数组下标运算符 [] 来访问指针所指向的数组中的元素。例如,下面是一个指向 3 个整数的数组的指针:

复制代码
int array[3] = {1, 2, 3};
int (*ptr_array)[3] = &array;

上述代码中,ptr_array 是一个指向 3 个整数的数组的指针。我们可以通过下标访问数组中的元素:

复制代码
printf("%d %d %d\n", (*ptr_array)[0], (*ptr_array)[1], (*ptr_array)[2]);

上述代码会输出 1、2 和 3,分别对应数组中的元素。

需要注意的是,由于数组指针指向的是一个数组,因此当我们想要使用数组指针所指向的数组时,需要使用括号将指针和下标括起来,例如上面的 (*ptr_array)[0]。

下面是一个完整的示例代码,演示了指针数组和数组指针的使用:

复制代码
#include <stdio.h>

int main() {
    // 指针数组
    int a = 1, b = 2, c = 3;
    int* ptr_array[3] = {&a, &b, &c};
    printf("%d %d %d\n", *(ptr_array[0]), *(ptr_array[1]), *(ptr_array[2]));

    // 数组指针
    int array[3] = {1, 2, 3};
    int (*ptr_array2)[3] = &array;
    printf("%d %d %d\n", (*ptr_array2)[0], (*ptr_array2)[1], (*ptr_array2)[2]);

    return 0;
}
相关推荐
2301_763472468 分钟前
C++20概念(Concepts)入门指南
开发语言·c++·算法
qq_124987075337 分钟前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_43 分钟前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.44 分钟前
Day06——权限认证-项目集成
java
瑶山1 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy1 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
2301_818732061 小时前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
园小异1 小时前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展
m0_706653231 小时前
分布式系统安全通信
开发语言·c++·算法
2501_941982051 小时前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信