深入剖析 C 语言中的指针数组与数组指针
资料合集下载链接:
https://pan.quark.cn/s/472bbdfcd014
在C语言中,指针是其强大和灵活性的核心。然而,围绕指针的概念有很多容易混淆的地方,其中“指针数组”和“数组指针”就是一对常见的“双胞胎”概念。它们名称相似,但含义和用法却大相径庭。
本文旨在清晰地辨析指针数组和数组指针这两个概念,并通过详细的代码示例,帮助读者彻底理解它们的声明、初始化、访问以及底层原理。
1. 指针数组 (Array of Pointers)
概念: 指针数组是一个数组,其每个元素都是一个指针。
想象一下一个柜子,柜子的每一个抽屉里都存放着一张小纸条,纸条上写着某个内存地址。这就是指针数组——一个存放地址的数组。
声明语法: 类型 *数组名[大小];
这里的 类型
是指针指向的数据类型。*
表示数组的元素是指针。数组名
是数组的名称。[大小]
指定了数组中指针元素的数量。
示例声明:
-
int *ptr_arr[5];
// 声明一个包含 5 个元素的数组,每个元素都是一个指向 int 类型的指针。 -
char *str_arr[3];
// 声明一个包含 3 个元素的数组,每个元素都是一个指向 char 类型的指针 (常用于存储字符串)。
初始化:
指针数组的元素可以被初始化为指向具体的变量、内存地址或字符串常量。
#include <stdio.h>int main() {int a = 10, b = 20, c = 30;int d[3] = {40, 50, 60};// 声明一个指针数组,包含 4 个元素,每个元素指向 intint *ptr_array[4];// 初始化指针数组的元素,让它们指向不同的 int 变量或数组元素ptr_array[0] = &a; // 指向变量 aptr_array[1] = &b; // 指向变量 bptr_array[2] = &c; // 指向变量 cptr_array[3] = &d[1]; // 指向数组 d 的第二个元素 (值 50)printf("--- 访问指针数组元素及其指向的内容 ---\n");for (int i = 0; i < 4; ++i) {// ptr_array[i] 是数组的第 i 个元素,它是一个指针 (地址)// *ptr_array[i] 是对该指针解引用,获取它指向的内存地址中的值printf("ptr_array[%d] 存储的地址: %p, 指向的值: %d\n&#