指针大小不一样主要原因在于:32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器
32/64位操作系统,数据类型字节数对比
32位 | 64位 | |
char | 1 | 1 |
char* | 4 | 8 |
short int | 2 | 2 |
int | 4 | 大多数4,少部分8 |
unsigned int | 4 | 4 |
float | 4 | 4 |
double | 8 | 8 |
long | 4 | 8 |
long long | 8 | 8 |
unsigned long | 4 | 8 |
指针 | 4 | 8 |
测试:
如图:
#include <stdio.h>
#define MySizeof(value) (char *)(&value+1)-(char*)&value
int main()
{
double a[] = { 1,2,3,4 };
int i;
double f;
double *q;
printf("%d\r\n", MySizeof(i));
printf("%d\r\n", MySizeof(f));
printf("%d\r\n", MySizeof(q));
printf("%d\r\n", MySizeof(a));
return 0;
}