| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2297 人关注过本帖
标题:数组元素地址问题
只看楼主 加入收藏
王连峰
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-6
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:12 
数组元素地址问题
int main()
{
    int arr[]={1,2,3,4,5};
     printf(“%d\n”,sizeof(&arr);
     printf(“%d\n”,sizeof(&arr[3]));
   return 0;
}
同志们上述打印结果是多少呢?为什么,可以帮忙解答一下吗?不胜感激!
搜索更多相关主题的帖子: 数组 元素 地址 printf sizeof 
2019-07-01 08:08
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:4 
通常32位是4, 64位是8
2019-07-01 08:41
王连峰
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-6
收藏
得分:0 
回复 2楼 吹水佬
嗯嗯,那么printf(“%d\n”,sizeof(arr[3]));
printf(“%d\n”,sizeof(&arr[3]));这两者结果一样吗,我调过,结果是不一样的,我想知道第二个打印的大小是什么意思,有试过吗?
2019-07-01 08:55
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
收藏
得分:4 
我打印出的是:
8
8
sizeof作用是返回对象所表示的字节大小,针对printf(“%d\n”,sizeof(&arr);这条语句,表达的意思是打印数组arr的地址所表示的字节大小,在我电脑上打印出的地址是000000000022FE30,所表示的十进制数是2293296,占据8个字节。

借用一下侯捷的话:勿在浮沙筑高台。
2019-07-01 09:06
王连峰
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-6
收藏
得分:0 
这是固定的吗?地址的大小都是固定8个字节大小吗
2019-07-01 09:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:4 
回复 3楼 王连峰
sizeof(arr[3]) 等同于 sizeof(int),因为 arr[3] 的类型是 int
sizeof(&arr[3])) 等同于 sizeof(int*),因为 &arr[3] 的类型是 int*
2019-07-01 09:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
以下是引用王连峰在2019-7-1 09:12:52的发言:

这是固定的吗?地址的大小都是固定8个字节大小吗
对于不同的编译器(包括编译参数),那不一定,2、4、8、…… 等等都有可以;
在同一个编译器(包括编译参数),那么所有指针类型的字节长度都是一样的。比如都是2、4、8、……。(C++不是这样)
2019-07-01 09:20
王连峰
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-6
收藏
得分:0 
好的,谢谢各位同志🙏
2019-07-01 09:22
王连峰
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-6
收藏
得分:0 
回复 7楼 rjsp
明白了,谢谢
2019-07-01 09:23
wufuzhang
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:贵宾
威 望:21
帖 子:206
专家分:1346
注 册:2017-8-9
收藏
得分:4 
回复 楼主 王连峰
int main()
{
    int a=100;
    printf("%d\n",sizeof(a));            //结果=4,a是int数据,int的大小是4个字节(Dev-C++,Win7 64位)
   
    int arr[]={1,2,3,4,5};                //int数组,元素5个
    printf("%d\n",sizeof(arr));            //结果=20,数组arr的大小=4*5(有5个元素)
    printf("%d\n",sizeof(&arr));        //结果=8,数组地址的大小,因为是64位系统,所以地址占8个字节
    printf("%d\n",sizeof(&arr[3]));        //结果=8,数组元素地址的大小,地址也是占8个字节
    printf("%d\n",sizeof(arr[3]));        //结果=4,数组元素的大小,即int的大小是4个字节
   return 0;
}

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2019-07-01 09:42
快速回复:数组元素地址问题
数据加载中...
 
   



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

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