| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1115 人关注过本帖
标题:指向数组的指针变量
只看楼主 加入收藏
hddgwxn586
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2017-5-18
结帖率:66.67%
收藏
 问题点数:0 回复次数:4 
指向数组的指针变量
指向数组的指针变量 如int (*p)[4]
也要为它分配内存吗?就是说p 本身也有一个地址。对吗?
搜索更多相关主题的帖子: 指向 数组 指针 变量 地址 
2017-05-22 16:17
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
可以试试通过sizeof输出它的大小~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-22 16:20
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
int (*p)[4]; 只是声明一个指针p变量,是指向由4个int类型数据组成的一组数数的指针。
这时p并没有实质的内容,也就是说p还没有定义,没有实质的意义。
int a[3][4];
int (*p)[4]; //声明
p = a; //定义
收到的鲜花
  • 九转星河2017-05-23 12:47 送鲜花  10朵   附言:好~
2017-05-22 16:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 吹水佬


突然明白了~其实int (*p)[4]这实质只为p指针分配了一个大小为int*的空间~虽然sizeof(*p)显示分配的是4个int大小的空间~但实质那p本身并不是真正占用那些空间~~也就是说int (*p)[4]实质只占用一个int*的内存空间~

其实申明数组本身就是防止该储存空间被系统非法利用~至于定义方面就算是定义其它数据类型也可以通过强制转型实现该类型的功能~只是那储存空间数据不受"保护"罢了~

相比于
int *p[4]这本身是一个数组~p先和[4]结合再和*结合~加个*只是表示该数组元素能读取其地址值~~其实就算是不加也能实现该功能~int p[4]  通过*((int*)p[0])也能读取其信息~只不过为了操作方便和程序可读性~大概是遵循尽量减少强制转型次数这个潜规则而在申明变量的时候选择恰当的数据类型吧~

不过~数组到底还是起到保护内存空间不被其它系统数据改写的作用……这个中途用强制转型来替代还是起不到保护作用的的~~~

[此贴子已经被作者于2017-5-23 12:50编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-23 12:47
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 4楼 九转星河
其实我发3楼是因为之前我对指针数组的理解一直有一个当时发现不了的误区~那就是一直以为int (*)[]所占用的储存空间等于其数组指针的长度~现在看来不是这个样子的~感觉编译器在对数据类型的解释应该是把数据类型的关键字在预编译的时候转化为机器指令了~在编译过程中那指令推测是个不会发生变化的"常量"~也就是意味着编译器对获取变量的解释是要通过预编译产生的机器指令执行的~~那可以叫做编译器的行为~编译代码可以变~但如果不改变编译器的构造框架或底层结构~其编译行为是不变的~~例如常规编程不能改变main关键字作为入口信息一样~~

到底int (*)[]其实只是占用一个int*的储存单位~这个要注意一下了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-23 13:13
快速回复:指向数组的指针变量
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024102 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved