栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

计算数组A的大小与地址

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算数组A的大小与地址

这是当时面试时遇到的一道题,我觉得要是都能答对了,那么对C语言的掌握程度已经可以达到工作的水平了。

1.先看题

已知数组A(基于32位MCU)的地址为0x80000000,数组为A[100]。
求:

  1. sizeof(A)
  2. sizeof(A[0])
  3. sizeof(&A)
  4. sizeof(&A[0])
  5. &A+1
  6. &A[0]+1

其实不想写结果的,但是一方面内容太少,第二方面就是还想自己留着看,那还得写

2.解析
  1. 考察数组的大小
  2. 考察数组中一个元素的大小
  3. 考察指针的大小,你知道&A是个指针吗?
  4. 与3同理
  5. 考察数组地址的偏移
  6. 考察数组中元素地址的偏移
3.程序(64位)
#include 
#include 
int main()
{
	int a[100];

	printf("sizeof(a)=%ldn",sizeof(a));
	printf("sizeof(a[0])=%ldn",sizeof(a[0]));
	printf("sizeof(&a)=%ldn",sizeof(&a));
	printf("sizeof(&a[0]=%ldn",sizeof(&a[0]));
	printf("&a=%pn",&a);
	printf("&a+1=%pn",&a+1);
	printf("&a[0]+1=%pn",&a[0]+1);
	return 0;
}

结果:

sizeof(a)=400
sizeof(a[0])=4
sizeof(&a)=8
sizeof(&a[0]=8
&a=0x7fffeb0041e0
&a+1=0x7fffeb004370
&a[0]+1=0x7fffeb0041e4

4.实际结果
  1. 400
  2. 4
  3. 4
  4. 4
  5. 0x80000190 //偏移400位 转换成16进制
  6. 0x80000004
总结

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/850624.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号