计算数组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 <stdio.h>
#include <string.h>
int main()
{
	int a[100];

	printf("sizeof(a)=%ld\n",sizeof(a));
	printf("sizeof(a[0])=%ld\n",sizeof(a[0]));
	printf("sizeof(&a)=%ld\n",sizeof(&a));
	printf("sizeof(&a[0]=%ld\n",sizeof(&a[0]));
	printf("&a=%p\n",&a);
	printf("&a+1=%p\n",&a+1);
	printf("&a[0]+1=%p\n",&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

总结

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值