c语言指针数组的具体使用

 更新时间:2023年12月21日 08:41:26   作者:鲍海超-GNUBHCkalitarro  
指针数组就是存放指针变量的数组,指针数组的本质是数组,而非指针,本文主要介绍了c语言指针数组的具体使用,具有一定的参考价值,感兴趣的可以了解一下

下面我们再讨论一个特殊的数组,它的元素为指针。

我们先从普通的元素为 int 类型的数组开始。

int arr1[5] = {1, 2, 3, 4, 5};

int arr2[5] = {11, 22, 33, 44, 55};

int arr3[5] = {111, 222, 333, 444, 555};

arr1、arr2、arr3均为 int [5] 类型的数组。

若数组名出现在表达式中,即会转换为指向首元素的指针,即 int * 类型。我们将这几个数组的首元素指针存储在另一个元素为 int * 的数组里。

int *pToArr[3];

pToArr[0] = arr1; //arr1转换为首元素指针,int[5]到int*

pToArr[1] = arr2; //arr2转换为首元素指针,int[5]到int*

pToArr[2] = arr3;  //arr3转换为首元素指针,int[5]到int*

pToArr[0]的类型为 int* ,指向arr1的第1个元素。

pToArr[1]的类型为 int* ,指向arr2的第1个元素。

pToArr[2]的类型为 int* ,指向arr3的第1个元素。

pToArr的类型为 int *[3] ,是一个数组。它有3个元素,每个元素的类型为 int * 。

由于元素类型为指针,所有它也被称为指针数组

定义和赋值完数组后,我们使用这个指针数组来访问所有元素。

for(int i = 0 ; i < 3; i ++)

{

int **p = pToArr + i; for(int j = 0; j < 5; j++)

{

printf("%d ", *(*p + j));

}

printf("\n");

}

看,这段程序遍历了3个数组的元素。

不过,这段程序的类型转换和运算稍微有点多,别着急,我们下面来详细分析它。

pToArr是一个 int *[3] 类型的数组,若出现在表达式 p = pToArr + i 中,即转换为指向首元素的指针,即 int *[3] 转为 int ** 。

p + 0 类型为 int** ,指向pToArr的第1个元素。

p + 1 类型为 int** ,指向pToArr的第2个元素。

p + 2 类型为 int** ,指向pToArr的第3个元素。 

接着,我们分析表达式 *(*p + j) 。

假设在 int **p = pToArr + i 中,i的值为0,那么p指向pToArr的第一个元素。

*p 表达式结果为pToArr[0],指向arr1的第一个元素。

表达式 *p + j ,分别指向arr1中各个元素。

最后,表达式 *(*p + j) 取得arr1数组内各个元素的值。 

我们再来顺一个整个流程。

p ,指向 pToArr 的第一个元素,类型为 int ** 。

*p ,指向 arr1 的第一个元素,类型为 int * 。

*p + j ,指向 arr1 中的第j个元素,类型为 int * 。

*(*p + j) ,为 arr1 中的第j个元素。

这样即可完成对 arr1 的访问,随着循环的继续,i会变为1,2。

p会指向pToArr中的第二、第三个元素,按照上面的处理,会继续访问arr2,arr3中元素的访问。

到此这篇关于c语言指针数组的具体使用的文章就介绍到这了,更多相关c语言指针数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++动态规划实现查找最长公共子序列

    C++动态规划实现查找最长公共子序列

    这篇文章主要介绍了C++动态规划最长公共子序列,在动态规划中,你要将某个指标最大化。在这个例子中,你要找出最长公共子序列
    2022-06-06
  • stringstream操纵string的方法总结

    stringstream操纵string的方法总结

    下面小编就为大家带来一篇stringstream操纵string的方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • STL常用算法之排序算法详解

    STL常用算法之排序算法详解

    这篇文章主要介绍了STL常用算法之排序算法详解,STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器、空间配置器,本文主要讲算法中的排序算法,需要的朋友可以参考下
    2024-01-01
  • C语言基于考研的栈和队列

    C语言基于考研的栈和队列

    这篇文章主要介绍了考研时的C语言中的堆栈和队列的相关资料,需要的朋友可以参考下,小编觉得这篇文章写的很好,希望能给你带来帮助
    2021-08-08
  • 深入理解C语言的指针

    深入理解C语言的指针

    这篇文章主要为大家介绍了C语言的指针,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Qt透明无边框窗口的实现示例

    Qt透明无边框窗口的实现示例

    这篇文章主要介绍了Qt透明无边框窗口的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • c语言获取当前工作路径的实现代码(windows/linux)

    c语言获取当前工作路径的实现代码(windows/linux)

    这篇文章主要介绍了c语言获取当前工作路径的实现代码(windows/linux),需要的朋友可以参考下
    2017-09-09
  • C语言实现在windows服务中新建进程的方法

    C语言实现在windows服务中新建进程的方法

    这篇文章主要介绍了C语言实现在windows服务中新建进程的方法,涉及C语言进程操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C++详细实现完整图书管理功能

    C++详细实现完整图书管理功能

    随着网络技术的高速发展,计算机应用的普及,利用计算机对图书馆的日常工作进行管理势在必行,本篇文章涵盖一个图书管理系统的全部实现代码,大家可以查缺补漏,提升水平
    2022-05-05
  • c++超细致讲解引用

    c++超细致讲解引用

    在我们日常的生活中每个人都或多或少存在一个"外号",例如《西游记》中孙悟空就有诸多外号:美猴王,孙行者,齐天大圣等等。那么在C++中,也可以给一个已经存在的变量取别名,这就是引用。那么接下来深入来探讨一下引用
    2022-05-05

最新评论