c语言基础类型包含有char,int, float, double等,显而易见,不同类型的变量所占的内存空间不同,然而当我们对这些不同数据类型进行 位制转换,那么会发生什么呢?
为了更好的理解在位置转换,我们首先看一个例子
#include <stdio.h>
int main(int argc, char* argv[])
{
int i = 5.01;
float f = 5;
printf("%f\n", 5);
printf("%lf\n", 5.01);
printf("%f\n", f);
printf("%d\n", 5.01);
printf("%f\n", i);
return 0;
}
C语言常量的存储类型
Q:如何获取c语言中常量的类型(在内存中的存储形式)
或者c语言中的常量都是什么数据类型呢?
c语言常量内存分析
看下面的例子
printf("%f\n", 5); //常量5是什么类型呢?在内存中占用了几个字节呢?
printf("%f\n", 5.01); //常量5.01是什么类型呢?在内存中占用了几个字节呢?
常量5是什么类型呢?在内存中占用了几个字节呢?
常量5.01是什么类型呢?在内存中占用了几个字节呢?
c语言中的常量类型可以通过sizeof来获取
注意:sizeof函数返回值类型为long int
sizeof函数的使用
// sizeof函数的使用
int a = 5;
printf("%ld\n", sizeof(int)); // sizeof入口参数可以是类型名
printf("%ld\n", sizeof(a)); // sizeof入口参数可以是变量名
printf("%ld\n", sizeof(5)); // sizeof入口参数可以是常量
C语言中格式控制符的作用
Q: c语言中的格式控制符的本质分析
格式控制符主要用于printf语句和文件的操作
注意:
- c语言中int和float类型均为4个字节,而double类型为8个字节
- 在printf语句中,float会自动转换成double,也就是, %f会从内存中读取八个字节的内容
c语言中的每个格式控制符均与特定的数据类型相对应,而这一切的本质均要从内存的角度去分析
%d => int 对应从内存中读取四个字节的数据
%f => double (float自动转换为double类型) 对应从内存中读取八个字节的数据
%…
实例分析
实例1如下:
printf("%f\n", 5);
分析如下:
参数5为int型,因此在内存中只占用四个字节,
然而%f使得printf语句从内存中读取八个字节的数据。
显然,内存访问越界,会有不可预料的情况发生。
实例2如下:
printf("%ld\n", sizeof(5.01));
分析如下:
参数5.01为double型,因此在内存中占用八个字节,
然而%d使得printf语句从内存中仅仅读取四个字节的数据。
显然,内存访问不正确,同样会有不可预料的情况发生。
C语言中的强制类型转换
Q1:具体分析 “int i = 5.01;”
将double型常量赋值给int型变量过程中会发生类型的强制转换
数据类型在强制转换过程中会发生什么?