当前位置: 首页 > news >正文

(C语言)指针数组的运用

前言:

C语言中的指针数组是一种特殊的数据结构,其每个元素都是一个指针,用于存储多个数据对象的地址。

本质:

指针数组的本质还是数组!!!!

类比:

字符数组 char arr [5]; 存放了字符的数组

整型数组 int arr [5;      存放整型的数组

指针数组    int *arr [4]; 这个数组存放的是整型的地址

                   char * arr[3];  这个数组存放的字符的地址

这个就是指针数组。

1. 指针数组的定义与声明

指针数组可以看作是一个数组,其中的每个元素都是一个指针。其基本形式如下:

类型说明符 *数组名[数组长度];

例如,定义一个包含3个整型指针的数组:

int *py[3];

上述代码声明了一个名为py的指针数组,数组长度为3,每个元素都是一个指向int类型的指针。 

2. 指针数组的初始化

指针数组可以通过直接赋值的方式进行初始化。例如:

int arr[5] = {10, 20, 30, 40, 50};
int *py[3] = {arr, arr + 1, arr + 2}; // 指向arr数组的前三个元素
#include <stdio.h>
int main()
{
	int a = 32;
	int b = 322;
	int c = 3222;
	int d = 32222;
	int* pa[4] = {&a,&b,&c,&d};   //这个就为指针数组
	

}

 这两个是有区别的哈  ()括号可有可无  理由如下:

括号 () 能够改变运算的优先级。但是在 *(pa[i]) 里,括号只是明确了先计算 pa[i] 这个表达式,然后再对结果进行解引用。因为 [ ] 运算符的优先级本来就高于 * 运算符,所以加括号并不会改变运算顺序。(ps:符号的优先级忘记的可以看下前面的文章)

3. 指针数组的应用场景

  1 .存储多个字符串

指针数组常用于存储多个字符串的地址。例如:

char *names[3] = {"Alice", "Bob", "Charlie"};
for (int i = 0; i < 3; i++) {
    printf("%s\n", names[i]); // 输出每个字符串
}
2 存储多个函数指针

指针数组也可以用于存储多个函数的地址。例如:

void (*funy[3])(void) = {func1, func2, func3};
for (int i = 0; i < 3; i++) 
{
    fun[i](); // 调用函数
}

上述代码中,funcPtrArray是一个函数指针数组,每个元素存储一个函数的地址。

 

3 动态内存管理

指针数组还可以用于动态分配内存。例如:

int *ptr[3];
for (int i = 0; i < 3; i++) 
{
    ptr[i] = (int *)malloc(sizeof(int));
    *ptr[i] = i; // 给每个指针分配内存并赋值
}

这种方式可以灵活地为每个指针分配内存,并通过指针数组管理这些内存。

4. 指针数组的注意事项

 1  指针解引用与访问

在使用指针数组时,需要注意指针解引用和访问的方式。例如:

int arr[5] = {10, 20, 30, 40, 50};
int *ptr[3] = {arr, arr + 1, arr + 2};
printf("%d\n", *(ptr[0] + 1)); // 输出20

上述代码中,*(ptrArray[0] + 1)表示访问arr数组的第2个元素。 

 

2 指针数组与普通数组的区别

指针数组与普通数组的主要区别在于,指针数组的元素是独立的指针变量,而普通数组的元素是连续存储的内存区域。因此,指针数组可以更灵活地管理内存,但需要手动管理每个指针的生命周期。

5. 实战技巧

1 使用指针数组优化代码

通过使用指针数组,可以简化对多个数据对象的操作。例如,在排序算法中,可以使用指针数组存储待排序元素的地址,从而避免重复访问内存。

2 处理复杂数据结构

指针数组可以与结构体结合使用,处理复杂的多维数据结构。例如:

typedef struct 
{
    int x;
    int y;
} Point;

Point points[3] = {{1, 2}, {3, 4}, {5, 6}};
Point *ptr[3] = {&points[0], &points[1], &points[2]};

在这个例子中,ptrArray存储了points数组中每个元素的地址,便于后续操作。

结语:

C语言中的指针数组是一种强大的工具,能够帮助开发者高效地管理和操作多个数据对象。通过理解其定义、声明、初始化及应用场景,可以更好地利用指针数组优化代码性能和内存管理。

希望本文能够帮助读者深入掌握指针数组的使用技巧,并在实际编程中灵活应用。

有兴趣的朋友可以关注一手,发现问题的可以指出,共同进步,

 

 

 

相关文章:

  • 【打卡D6】二分法
  • 【PyQt5】【Visual Studio】环境配置
  • 【MySQL数据库】约束
  • Audacity 技术浅析(一)
  • C# Exe + Web 自动化 (BitComet 绿灯 自动化配置、设置)
  • 什么是强哈希算法pbkdf2(Password-Based Key Derivation Function)
  • 算法题(98):大数加法
  • Python桌面应用开发入门:Tkinter+PyQt5实战文件管理器教程
  • 2024华东师范大学计算机复试上机真题
  • Androidstudio实现一个app引导页(超详细)
  • 【电路笔记】-多谐振荡器
  • 2024年12月CCF-GESP编程能力等级认证C++编程六级真题解析
  • Java常用设计模式
  • maven笔记
  • 电子学会—2024年06月青少年软件编程(图形化)二级等级考试真题——绘制图形
  • 如何用Java将实体类转换为JSON并输出到控制台?
  • 每日一题---dd爱框框(Java中输入数据过多)
  • JVM 2015/3/15
  • 《我的Python觉醒之路》之转型Python(十三)——控制流
  • GetCurrentTime
  • 不止是生态优势,“浙江绿谷”丽水有活力
  • 热点问答:特朗普与俄乌总统分别通话,他们谈了什么
  • 研究显示:肺活量衰减始于20至25岁
  • 去年中企海外新增风电装机量5.4GW,亚太区域占比过半
  • 上海百年龙华码头开启新航线,弥补浦江游览南段空缺
  • 大风+暴雨,中央气象台双预警齐发