• 欢迎访问C语言网www.dotcpp.com 比赛栏每月有奖月赛!举办比赛联系QQ:2045302297
  • 问题反馈、粉丝交流 QQ群327452739 蓝桥杯训练群:113766799 申请群时请备注排名里的昵称
  • C语言研究中心 为您提供有图、有料、解渴的C语言专题! 欢迎讨论!

关于数组指针与指针数组的解释

编程经验 CTO 4210次浏览 3个评论

关于数组指针和 指针数组,相信狠很多同学对此疑惑过,今天我们来把他们分个清楚!

首先,让我们从字面意义上理解他们:

指针数组 本质呢 是数组!

数组指针 本质呢 是 指针!

(PS:你可以认为后俩字是什么,它本质就是什么! 语文的知识吧?宾语?(*^__^*) )

关于数组指针与指针数组的解释\

搞清楚此点之后呢,我们就可以继续来讲了,其实呢,指针数组本身就是个数组,只不过呢,它里面存放的数据类型不是int,也不是char这类基本类型,而是一个指针类型,说白了就是地址,所以叫指针数组! 记住:是存放指针的数组!

那么理解这个之后,数组指针也一样的道理,它呢本质是个指针,只不过是指向一个一维数组的指针,也称之为“行指针”,前提呢,是这个一维数组的长度和这个数组指针的长度要一致才可以赋值。

下面我们通过代码来理解:

//////////////////////////////////////////////////////////////////////////
//Name: 测试 数组指针 与 指针数组 
//Author:C语言研究中心(www.dotcpp.com)
//time:2015/5/28
//////////////////////////////////////////////////////////////////////////
#include<stdio.h>
int fun()
{
 char *p1[10]; // 指针数组
 char (*p2)[10]; //数组指针 

 //10个char变量
 char a1[10]={'1','2','3','4','5','6','7','8','9','\0'}; 
 //两个长度为10的一维数组
 char a2[2][10]={{'q','w','e','r','t','y','u','i','o','\0'},{'a','s','d','f','g','h','j','k','l','\0'}}; 


 //将十个char类型变量的地址依次放到指针数组里
 p1[0]=&a1[0];
 p1[1]=&a1[1];
 //...
 p1[8]=&a1[8];


 //验证输出
 printf("%c\n",*p1[0]);
 printf("%c\n",*p1[1]);
 //...
 printf("%c\n",*p1[8]);

 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //将一维数组的地址放到数组指针里
 p2=&a2[0];

 printf("%s\n",p2);
 printf("%s\n",p2+1);//注意此处+1为加一行!

 return 0;
}

怎么样?能看明白吗?运行结果如下:

关于数组指针与指针数组的解释\

如果您通过注释看懂这段代码后,想必应该就清楚数组指针和 指针数组的区别了。

最后我们总结数组指针和指针数组的区别如下:

1、本质不同,一个是数组,一个是指针

2、数组指针是一个变量,指针数组是N(数组长度)个变量

C语言研究中心(www.dotcpp.com)


C语言网, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于数组指针与指针数组的解释
喜欢 (7)
[jinyangH@aliyun.com]
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
(3)个小伙伴在吐槽
  1. 来个评论吧
    距阵2016-09-05 20:42 回复
  2. 到底能不能加载出来
    bbb2016-09-05 20:43 回复
  3. 不是很清楚
    Cindy2016-10-19 19:23 回复