您的位置:首页 > 其它

指针数组和数组指针

2015-12-03 20:53 363 查看


Romi-知行合一

轻轻的风轻轻的梦,轻轻的晨晨昏昏, 淡淡的云淡淡的泪,淡淡的年年岁岁。
posts - 119, comments - 69, trackbacks - 0, articles - 0

  博客园 :: 首页 :: 新随笔 :: 订阅 

 :: 管理
<2015年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789


公告

一介布衣兮,乐享学习之心得
昵称:romi

园龄:4年

粉丝:124

关注:4
+加关注



搜索

 

 



随笔分类

C/C++(17)
Linux(6)
Qt(25)
VC(19)
并行计算(17)
软件设计(9)
数据结构&算法(14)
图像&遥感(16)
学习&生活(5)



随笔档案

2013年9月 (7)
2012年12月 (3)
2012年11月 (8)
2012年10月 (1)
2012年9月 (7)
2012年8月 (20)
2012年7月 (5)
2012年6月 (2)
2012年5月 (18)
2012年4月 (21)
2012年3月 (11)
2012年2月 (10)
2012年1月 (6)



积分与排名

积分 - 177909
排名 - 855



阅读排行榜

1. 指针数组和数组指针的区别(61918)
2. Qt下 QString转char*(48824)
3. Qt中图像的显示与基本操作(34466)
4. C/C++中函数参数传递详解(22000)
5. Qt QTreeWidget 树形结构实现(20478)

指针数组和数组指针的区别

Posted on 2012-01-10 11:15 romi 阅读(61923) 评论(10) 编辑 收藏

这两个名字不同当然所代表的意思也就不同。我刚开始看到这就吓到了,主要是中文太博大精深了,整这样的简称太专业了,把人都绕晕了。从英文解释或中文全称看就比较容易理解。
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针
数组指针:a pointer to an array,即指向数组的指针
还要注意的是他们用法的区别,下面举例说明。
int* a[4]     指针数组     
                 表示:数组a中的元素都为int型指针    
                 元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*
int (*a)[4]   数组指针     
                 表示:指向数组a的指针
                 元素表示:(*a)[i]  
注意:在实际应用中,对于指针数组,我们经常这样使用:

这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。
代码演示如下:

注意:定义了数组指针,该指针指向这个数组的首地址,必须给指针指定一个地址,容易犯的错得就是,不给b地址,直接用(*b)[i]=c[i]给数组b中元素赋值,这时数组指针不知道指向哪里,调试时可能没错,但运行时肯定出现问题,使用指针时要注意这个问题。但为什么a就不用给他地址呢,a的元素是指针,实际上for循环内已经给数组a中元素指定地址了。但若在for循环内写*a[i]=c[i],这同样会出问题。总之一句话,定义了指针一定要知道指针指向哪里,不然要悲剧。
类似的还有指针函数和函数指针,遇到了再说吧。

分类: C/C++
标签: 指针数组数组指针区别

好文要顶 关注我 收藏该文 

 





romi
关注 - 4
粉丝 - 124

+加关注

15

1

(请您对文章做出评价)

« 上一篇:C++主要数据类型在计算机中所占字节大小
» 下一篇:字节存储排序:大端和小端的判别及转换

Feedback

#1楼   

2012-08-24 13:35 by 理工紫  

学习了
支持(1)反对(0)

#2楼   

2013-09-15 17:33 by 小浪花  

恩,很有帮助 ,谢谢了
支持(0)反对(0)

#3楼   

2014-05-12 16:54 by 绝影未绝  

很不错!
支持(0)反对(0)

#4楼   

2014-05-19 11:10 by cumtchw  

但若在for循环内写*a[i]=c[i],这同样会出问题。

我是菜鸟,这一句不明白
支持(0)反对(0)

#5楼   

2014-06-05 17:41 by 雨中的路  

@cumtchw

首先数组a中存放的是指针,即应该是一个整型变量的地址。

那么 *a[i]=c[i] 语句的意思就是将c[i]这个整型变量的值 赋给 地址为a[i]一个整型变量。

但是注意此时数组a中的a[i]指针变量的值并没有赋值,那么就是对一个未知的地址取值,那么根本就无法找到*a[i]这个变量,又怎么将c[i]的值赋给*a[i]呢。

以上是我的理解,不一定保证绝对正确。

ps:你可以在编译器上单步调试一下,看一下a[i]里面的存放的地址的值的变化就可以了。
支持(0)反对(0)

#6楼   

2015-02-06 09:46 by guohuihui  

错误
支持(0)反对(0)

#7楼   

2015-03-18 15:21 by Jacy_liu  

@cumtchw

因为你的a[i]中装的是地址(指针),你在未对指针初始化的情况下就对它指向的单元赋值,是不可行的。写的有点拗口,哈哈哈。。。。
支持(0)反对(0)

#8楼   

2015-03-18 15:22 by Jacy_liu  

学习了,谢谢楼主!!!
支持(0)反对(0)

#9楼   

2015-08-02 19:52 by 木头和马尾  

有错误,c本身就表示地址,不能对c再取地址
支持(0)反对(1)

#10楼   

2015-09-26 21:18 by lookingfor  

@木头和马尾

你没有试过怎么知道不可以呢。
支持(0)反对(0)

刷新评论刷新页面返回顶部

注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。

博客园首页博问新闻闪存程序员招聘知识库

最新IT新闻:

· “机器人之父”恩格尔伯格逝世,曾造出世界第一个工业机器人

· 资本寒冬下,生活在创业大街的人们

· 百度全家桶全面整合Kindle及Fire平板 成默认搜索引擎

· Uber向第三方应用开放打车功能

· 淘宝拍卖牵手万科,1212上线百余套江浙房源部分5折起拍

» 更多新闻...

最新知识库文章:
· 从涂鸦到发布——理解API的设计过程

· 好的架构是进化来的,不是设计来的

· 被误解的MVC和被神化的MVVM

· 再谈设计和编码

· 什么时候应该避免写代码注释?

» 更多知识库文章...

Powered by: 
博客园 

Copyright © romi
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: