详解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;
}
相关推荐
爱装代码的小瓶子几秒前
【c++知识铺子】封装map和set(详细版)
android·java·c++
2201_757830873 分钟前
tlias的部门的增删改查操作
java·开发语言
Aaron15883 分钟前
RFSOC+VU13P在无线信道模拟中的技术应用分析
数据结构·人工智能·算法·fpga开发·硬件架构·硬件工程·射频工程
咸鱼加辣12 分钟前
“刻意强调” O(1)
数据结构·算法
南烟斋..16 分钟前
Linux进程管理完全指南:创建、终止、回收与替换
linux·算法
东华万里21 分钟前
第十五讲 指针 从本质吃透 C 语言指针(上)
c语言·开发语言
雨雨雨雨雨别下啦22 分钟前
Spring AOP概念
java·后端·spring
on the way 12322 分钟前
day04-Spring之Bean的生命周期
java·后端·spring
代码笔耕24 分钟前
面向对象开发实践之消息中心设计(二)
java·后端·架构
点我头像干啥26 分钟前
机器学习算法之动量法:优化梯度下降的“惯性”策略
人工智能·神经网络·算法·机器学习