C语言关于指针数组的总结,关于数组指针与指针数组的解释

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

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

指针数组 本质呢 是数组!

数组指针 本质呢 是 指针!

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

47058e8e6f5a6fa115ccf48a7df8943b.png\

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

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

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

//

//Name: 测试 数组指针 与 指针数组

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

//time:2015/5/28

//

#include

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;

}

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

573a32c060e6034dafbdeda586906653.png\

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

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

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

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

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

C语言网, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于数组指针与指针数组的解释!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值