鱼C论坛

 找回密码
 立即注册
查看: 3547|回复: 13

求数组字节大小的问题

[复制链接]
发表于 2012-7-15 22:26:51 | 显示全部楼层 |阅读模式
1鱼币
#include<iostream.h>
void main()
{
   int ar[10]={12,23,34,45,56,78,89,90,100};
   cout<<sizeof(ar)<<endl;
   cout<<sizeof(&ar)<<endl;
   int (&br)[10]=ar;
   int (*p)[10]=&ar;

   cout<<sizeof(p)<<endl;
   cout<<sizeof(*p)<<endl; //???
   cout<<sizeof(&p)<<endl;
}
5,6行:数组名取得就是首元素的地址,为什么内存大小是40,而不是4?
11行 指针的是4字节,为什么编译器显示的是40字节?

最佳答案

查看完整内容

按你的题目 我分不清你说的哪行 打印结果为 cout
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-15 22:26:52 | 显示全部楼层
按你的题目  我分不清你说的哪行   打印结果为  
  cout<<sizeof(ar)<<endl;            // 40 因为ar的类型为 int [10] 类型,
   cout<<sizeof(&ar)<<endl;        // 4  因为&ar 的类型为 int (*)[10] 类型  是个指针类型
   int (&br)[10]=ar;
   int (*p)[10]=&ar;

   cout<<sizeof(p)<<endl;            // 打印结果为4 原因同上
   cout<<sizeof(*p)<<endl; //???       //打印结果为 40  因为*p  的类型为 int [10] 类型
   cout<<sizeof(&p)<<endl;                 //打印结果为 4  因为&p的类型为  int (*)[10]* 类型,为一个指向数组指针的二级指针,只要是指针就是4个字节,  写法编译器不会通过,但是是这个道理
我没拉去试,但是上述结果在32为PC机应该没有问题,若对于64位的话指针应该是8个字节。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-15 22:56:54 | 显示全部楼层
大家可以讨论一下。。。。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-16 00:09:28 | 显示全部楼层
cout<<sizeof(&ar)<<endl;
vc6 bug换其他编译器试试
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-16 00:15:07 | 显示全部楼层
那么这个 cout<<sizeof(*p)<<endl; //???
为什么也是40个字节!!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-16 00:33:50 | 显示全部楼层
cout<<sizeof(*p)<<endl; //???
因为p指向了ar
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-16 01:43:01 | 显示全部楼层
你确定这代码对吗?能编译吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-16 13:02:35 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-16 13:03:34 | 显示全部楼层

但是p是个指针啊,指针是四字节啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-16 14:51:08 | 显示全部楼层
看下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-16 19:47:31 | 显示全部楼层
Tzdner_C 发表于 2012-7-15 22:26
按你的题目  我分不清你说的哪行   打印结果为  
  cout

原来*p是一个数组,现在明白了,谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-16 19:48:19 | 显示全部楼层
但是p是个指针啊,指针是四字节啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-20 01:16:39 | 显示全部楼层
sizeof ( )这个函数只看你定义时候的类型的。
你这样定义int ar【10】 系统就分好了40字节内存了,所以就是40.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-20 10:38:55 | 显示全部楼层
小鱼苗
帮顶
顺便混个脸熟
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 04:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表