0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

指针数组的示例说明

C语言编程学习基地 来源:51CTO 作者:暮雪年华 2022-08-12 16:27 次阅读

指针数组

数组是一种类型的数的集合

整型数组的元素都是int类型

指针数组的元素都是指针变量

    int* arr1[10];//整型指针的数组
    char*arr2[10];//一级字符指针的数组
    char** arr3[5];//二级字符指针的数组

参考这一份示意图

a040e6ec-1a15-11ed-ba43-dac502259ad0.png

示例1:定义多个字符指针

在上一站的字符指针里面,提到了可以直接用指针来创建一个常量字符串

同理,我们可以将多个指针放在一块,凑成指针数组,一次性创建多个指向常量字符串的指针

a0618e06-1a15-11ed-ba43-dac502259ad0.png

int main(){  char* arr[] = { "abcdef", "qwer", "zhangsan" };  int i = 0;  int sz = sizeof(arr) / sizeof(arr[0]);
  for (i = 0; i < sz; i++)  {    printf("%s
", arr[i]);  }  return 0;}

示例2:存放数组名的数组

在之前的学习中,我们知道:数组名代表数组首元素的地址

可以说,数组名本质上也是一个指针

既然是指针,就能放进指针数组里面

int main(){  int arr1[] = { 1,2,3,4,5 };  int arr2[] = { 2,3,4,5,6 };  int arr3[] = { 3,4,5,6,7 };
  int* arr[] = {arr1, arr2, arr3};  //arr是指针数组  int i = 0;  for (i = 0; i < 3; i++)  {    int j = 0;    for (j = 0; j < 5; j++)    {      printf("%d ", arr[i][j]);//*(*(arr+i)+j)    }    printf("
");  }
  return 0;}

这串代码中,我们需要了解的是arr[i][j]和*(*(arr+i)+j)之间的关系

以下内容若有错误,还请大家在评论区指正!

arr[i][j]和*(*(arr+i)+j)

它们都是访问数组的形式,用到了不同的操作符但表达的含义相同:下标为i、j的元素

在内存中,数据的存储是连续的

创建一个二维数组,可以看到两行的数据是连续存放在数组里面的

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

既然是连续的,我们就可以用指针++的形式来访问二维数组里面的所有元素

*(arr+i)指向第i行元素*(arr+i)+j指向第i行下标为j的元素的地址*(*(arr+i)+j)再次解引用,得到j元素

数组名的本质是地址,是该数组首元素的地址

二维数组的首元素是第一行,数组名arr就是第一行的地址

我们可以把二维数组的每一行理解为独立的一个一维数组

这时候,二维数组的形式和上述代码中int* arr[]数组的形式就相同了

int arr1[] = { 1,2,3,4,5 };  int arr2[] = { 2,3,4,5,6 };  int arr3[] = { 3,4,5,6,7 };  //arr1 arr2 arr3是二维数组里面的每一行  int* arr[] = {arr1, arr2, arr3};  //arr等价于一个二维数组,但有不同


int* arr[]和二维数组的不同

int*arr数组里的元素arr1,arr2,arr3的地址是连续存放的

这里设计到一个新概念:数组指针

将在下一节讲解!

a07e3b78-1a15-11ed-ba43-dac502259ad0.png

但是它们对应的各自的数组内数据并不连续

如:arr1和arr2这两个数组各自元素的地址并不连续

a0969d44-1a15-11ed-ba43-dac502259ad0.png

示例3:存放二级指针的数组

既然一级指针可以放进数组里,二级指针也是指针,同样也能塞进数组里

下面这串代码里面的arr2就是一个存放二级指针的数组

#include int main(){  int a = 10;  int* p = &a;  int** pp = &p;  int** arr2[4] = {pp};
  return 0;}

你学会了吗?下次给大家分享数组指针哦!

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指针
    +关注

    关注

    1

    文章

    469

    浏览量

    70360
  • 数组
    +关注

    关注

    1

    文章

    408

    浏览量

    25593

原文标题:【C语言】指针进阶第二站:指针数组!

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言数组名和指针

    指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大
    发表于 08-27 17:48 599次阅读

    C语言中指针数组数组指针的区别

    指针数组之间存在着紧密的关系。在本文中,我们将探讨指针数组的关系、指针算术和数组遍历、多维
    发表于 08-17 15:29 275次阅读

    指针数组数组指针的区别

    。判断数组指针指针数组主要通过运算符的优先级来判断。int (*p)[4];// 由于( )的优先级高,说明p是一个
    发表于 07-15 21:41

    数组指针的详细讲解

    数组指针的详细讲解
    发表于 10-16 08:44 0次下载

    详谈数组指针的区别与联系

    详谈数组指针的区别与联系
    的头像 发表于 06-29 15:18 2.2w次阅读
    详谈<b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>的区别与联系

    指针数组数组指针的区别

    这里我们区分两个重要的概念:指针数组数组指针
    的头像 发表于 06-29 15:30 1.9w次阅读
    <b class='flag-5'>指针</b><b class='flag-5'>数组</b>和<b class='flag-5'>数组</b><b class='flag-5'>指针</b>的区别

    理解函数指针、函数指针数组、函数指针数组指针

    理解函数指针、函数指针数组、函数指针数组指针
    的头像 发表于 06-29 15:38 1.4w次阅读
    理解函数<b class='flag-5'>指针</b>、函数<b class='flag-5'>指针</b><b class='flag-5'>数组</b>、函数<b class='flag-5'>指针</b><b class='flag-5'>数组</b>的<b class='flag-5'>指针</b>

    C语言中指针数组

    #define SIZE 10int arry[SIZE]={0,1,2,3,4,5,6,7,8,9}; //数组名arry表示数组首元素的地址*int p,temp;//可直接初始化定义指针
    发表于 01-13 13:11 3次下载
    C语言中<b class='flag-5'>指针</b>与<b class='flag-5'>数组</b>

    C语言指针数组的区别

    在C语言教程中我们使用通过数组名通过偏移和指针偏移都可以遍历数组,那么指针数组到底有什么区别??
    的头像 发表于 07-18 16:29 1519次阅读

    二维数组数组指针以及指针数组

    二维数组数组指针以及指针数组
    的头像 发表于 08-16 09:02 2251次阅读

    【C语言进阶】“数组指针”和“指针数组”都是啥跟啥?

    【C语言进阶】“数组指针”和“指针数组”都是啥跟啥?
    的头像 发表于 08-31 13:21 1668次阅读

    C语言数组元素的指针

    C语言调用函数时虚实结合的方法都是采用“值传递”方式,当用变量名作为函数参数时传递的是变量的值,当用数组名作为函数参数时。 由于数组名代表的是数组元素地址,因此传递的值是地址,所以要去形参为
    的头像 发表于 03-10 14:45 579次阅读

    C语言中什么是指针数组

    在C语言中一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存
    的头像 发表于 03-10 15:26 1263次阅读

    数组指针不能混用的情况

    数组指针不能混用的情况  数组指针是 C/C++ 中非常常见的特性和概念。然而,在某些情况下,数组
    的头像 发表于 12-07 13:46 304次阅读

    数组指针不相同吗?数组指针有哪些区别

    数组就是指针指针就是数组,这样的言论在评论区看到不下于10次。
    的头像 发表于 12-13 16:34 344次阅读
    <b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>不相同吗?<b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>有哪些区别