1. 64位和32位格数据类型大小
| 32位编译器(字节) | 64位编译器(字节) | 备注 | 取值范围 |
---|
char | 1 | 1 | | |
char* | 4 | 8 | 因为32位的寻址空间是232, 即32bit,所以大小为4字节,64位寻址空间位264,故8字节 | |
int | 4 | 4 | | -2^31 - 2 ^ 32 - 1 |
unsigned int | 4 | 4 | | |
float | 4 | 4 | | |
dobule | 4 | 4 | | |
long | 4 | 8 | | |
unsigned long | 4 | 8 | | |
long long | 8 | 8 | | |
2. 例子
#include <stdio.h>
#include <inttypes.h>int main()
{int num;printf("int 的大小为 :%d\n" , sizeof(int));int8_t a;printf("int8_t a 的大小为: %d\n",sizeof(a));int16_t b;printf("int8_t b 的大小为: %d\n",sizeof(b));int16_t *c;printf("int16_t *c 的指向为: %p\n",c);printf("int16_t *c 的大小为: %d\n",sizeof(c));int *d;printf("int8_t *d 的指向为: %p\n",c);printf("int8_t *d 的大小为: %d\n",sizeof(c));printf("sizeof(int *) 的大小为: %d\n",sizeof(int*));char* s = "hello world";printf("char *s 的地址为: %p\n",s);printf("char *s + 1 的地址为: %p\n",s + 1);return 0;
}
3. 运行结果
int 的大小为 :4
int8_t a 的大小为: 1
int8_t b 的大小为: 2
int16_t *c 的指向为: (nil)
int16_t *c 的大小为: 8
int8_t *d 的指向为: (nil)
int8_t *d 的大小为: 8
sizeof(int *) 的大小为: 8
char *s 的地址为: 0x4008aa
char *s + 1 的地址为: 0x4008ab