sizeof是求字节数运算符
- 其基本使用方法是:sizeof(n),n可以为变量本身,也可以为变量类型。
- sizeof(n)将在编译时被替换为n在内存中占用的字节数。
1. 返回各个基本数据类型在内存中的大小
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("sizeof(char):%d\r\n", sizeof(char));
printf("sizeof(short):%d\r\n", sizeof(short));
printf("sizeof(int):%d\r\n", sizeof(int));
printf("sizeof(long):%d\r\n", sizeof(long));
printf("sizeof(float):%d\r\n", sizeof(float));
printf("sizeof(double):%d\r\n", sizeof(double));
return 0;
}
运行结果:
2. 对变量求字节数
#include <stdio.h>
int main(int argc, char* argv[])
{
int nValue = 0;
short sValue = 0;
printf("%d, %d\r\n", sizeof(nValue), sizeof(sValue));
return 0;
}
运行结果:
3. 应用实例
判断当前运行程序的位数,查看是32位还是64位,32位系统中指针大小为4字节,64位系统中为8位字节。
int main(int argc, char* argv[])
{
printf("sizeof(char*): %d\r\n", sizeof(char*));
return 0;
}
- 32位编译的情况下指针大小为4个字节
- 64位编译的情况下指针大小为8个字节
4. 计算机地址与内存空间的关系
一、 我们知道计算机的内存单位有 比特位bit(也就是二进制位1/0)、字节byte、kb、mb、gb等等,其中比特位是计算机最小的内存单元,且满足:8bit=1byte(习惯用B表示)
1024B=1kb
1024kb=1mb(MB)
1024M=1gb(GB)
二、我们使用的计算机有32位和64位计算机,相信大家都有个疑惑32位和64位到底是什么意思呢?简单通俗地讲,可以理解为32位计算机有32条地址线(数据线)那么64位计算机就有64条地址线(数据线),因为每条地址线是通电的,那么就可以产生高低电平,高电平用’1’表示,低电平用’0’表示,'1’和’0’就可以构成二进制。那么以32位计算机为例。
32位计算机就有32个二进制位,计算机中每个地址都由这32个二进制位组成,那么可以组成2^32个地址,即4,294,967,296个地址。那就有个问题每个地址指向的内存单元是多大呢?一个比特?一个字节(8个比特)?还是更大…
答案是一个地址指向的内存单元是一个字节,也就是说一个地址表示一个字节的内存,那么4,294,967,296个地址,就指向了4,294,967,296个字节的内存单元,用上面的等式换算一下,最终等于4GB,也就是说32位的计算机可以访问的最大内存空间为4GB。
64位的计算机,用同样的方法计算是170多亿GB,但实际最多访问128GB内存空间。
4.学习视频地址:sizeof运算符