这是当时面试时遇到的一道题,我觉得要是都能答对了,那么对C语言的掌握程度已经可以达到工作的水平了。
1.先看题已知数组A(基于32位MCU)的地址为0x80000000,数组为A[100]。
求:
- sizeof(A)
- sizeof(A[0])
- sizeof(&A)
- sizeof(&A[0])
- &A+1
- &A[0]+1
其实不想写结果的,但是一方面内容太少,第二方面就是还想自己留着看,那还得写
2.解析- 考察数组的大小
- 考察数组中一个元素的大小
- 考察指针的大小,你知道&A是个指针吗?
- 与3同理
- 考察数组地址的偏移
- 考察数组中元素地址的偏移
#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=0x7fffeb0041e44.实际结果
- 400
- 4
- 4
- 4
- 0x80000190 //偏移400位 转换成16进制
- 0x80000004



