使用64位linux系统测试。地址一般是8个字节,需要用long。下面的思路也可以用于其他类型。
方法1
使用sizeof
#include <stdio.h>
int
main()
{
printf("%lu\n", sizeof(int));
return 0;
}
注意不要用%d
作为占位符,否则会出现警告:
test.c: In function ‘main’:
test.c:6:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("%d\n", sizeof(int));
输出:
$ gcc test.c
$ ./a.out
4
方法2
利用数组
#include <stdio.h>
int
main()
{
int a[2];
long size;
size = (long)&a[1] - (long)&a[0];
printf("&a[0]:%p\n", &a[0]);
printf("&a[1]:%p\n", &a[1]);
printf("offset: %ld\n", &a[1] - &a[0]);
printf("size: %ld\n", size);
}
输出:
$ gcc test.c
$ ./a.out
&a[0]:0x7ffda3f2f040
&a[1]:0x7ffda3f2f044
offset: 1
size: 4