【知识准备】
其他:sizeof运算符
【实例描述】
本例将介绍各种类型的变量在计算机中所占字节的大小,以便大家对计算机资源进行合理利用。程序如果大的话,程序员就需要对程序进行优化。有时候,变量会很多,占用很大的内存,这时就需要对变量类型进行适当的选取,选取得好也可以节约很多内存。但是如何知道变量到底占多少字节呢?下面就讲述如何对变量进行测量。
【实现过程】
本例实现功能比较重要,程序主要使用的是sizeof()运算符对各类变量进行所占内存字节数的测量。当然,sizeof()的用法还有很多,这里只是列举部分用法,更多用法,大家可以自行探究。
【代码解析】
本例将举出实际案例代码使用sizeof()对变量所占字节数进行测量,也包含对内置类型的直接测量。详细代码如下:
// 和enter一起学习C语言-计算变量所占字节数
// 开发环境:Visual Studio 2019
// 头文件
#include <stdio.h> // 包含printf的头文件
#include <stdlib.h> // 包含system的头文件
// 主函数
int main(int argc, char* argv[])
{
// 对C语言内置类型的所占字节数的测试
printf("size of char is:%d\n", sizeof(char));// 检测字符型数据所占字节数
printf("size of short is:%d\n", sizeof(short));// 检测短整型数据所占字节数
printf("size of int is:%d\n", sizeof(int));// 检测整型数据所占字节数
printf("size of short int is:%d\n", sizeof(short int));// 检测短整型数据所占字节数
printf("size of long int is:%d\n", sizeof(long int));// 检测长整型数据所占字节数
printf("size of float is:%d\n", sizeof(float));// 检测浮点型数据所占字节数
printf("size of double is:%d\n", sizeof(double));// 检测双精度型数据所占字节数
// 对字符及字符串数组所占字节数的测量
char a[] = { 'a','b','c','d','e' };// 初始化数组a
printf("size of a[] is:%d\n", sizeof(a));// 输出数组a所占字节数
char b[] = "abcde";// 初始化数组b
printf("size of b[] is:%d\n", sizeof(b));// 输出数组b所占字节数
char c[][3] = { {'a','b','c'},{'d','e','f'},{'g','h','i'},{'j','k','l'} };// 初始化二维数组c
printf("size of c[][] is:%d\n", sizeof(c));// 输出二维数组c所占字节数
printf("sizeof(c[0]) is:%d\n", sizeof(c[0]));// 输出二维数组c一行所占字节数
printf("sizeof(c[0][0]) is:%d\n", sizeof(c[0][0]));// 输出二维数组c一个元素所占字节数
// 对指针所占字节数的测量
char* p = 0;// 初始化字符指针
printf("sizeof char *p is:%d\n", sizeof(p));// 输出字符型指针所占字节数
// 对字符数组所占字节数的测量
char d[][5] = { "abcc","deff","ghii","jkll" };// 初始化字符数组
printf("sizeof d[0] is:%d\n", sizeof(d[0]));// 输出一行字符所占字节数
printf("sizeof d[0][0] is:%d\n", sizeof(d[0][0]));// 输出二维数组一个元素所占字节数
// 使程序处于挂起状态,等待用户按键以继续操作
system("pause");
// 返回整形值0表示程序运行正确
return 0;
}
其中:
- 第13~19行对C语言提供的内置数据类型各自所占的字节数进行测量并输出;
- 第22~29行对字符所占字节数,使用sizeof()进行测量所占字节数并输出;
- 第32~33行对指针所占字节数,使用sizeof()进行测量所占字节数并输出;
- 第36~38对数组所占字节数,使用sizeof()进行测量所占字节数并输出。