c语言中的类型转换(有关内存中的形态)

需要理解的是,对一个变量进行类型转换,并不是修改这个变量的类型,而是创建了这个变量的拷贝,原本的数据类型是不变的,参与运算的是拷贝后的变量。

1、对于隐式转换(即计算机自己完成的类型转换)

对于两个变量x,y之间的运算,若他们的类型相同,则计算结果类型相同,若两者类型不同,则表达式的类型与综合性最高的部分相同。综合性排名如下(由低到高)

char
short
int
long
long long
float
double
long double

对于赋值时的转换

注意:赋值时是等号右边的类型向等号左边的类型转换,也就意味着,并不一定是类型的提升,有可能是数据的降低(此时大多数编译器会发出警告)

2、显示转换

int i;

(float) i;//拷贝i的值,拷贝值为float型

指针同理

时间: 2024-12-29 06:51:17

c语言中的类型转换(有关内存中的形态)的相关文章

C语言之查看数据在内存中表现形式

#include<stdio.h> void viewRAM(); void main() { viewRAM(); } //查看内存,打印内存地址 void viewRAM() { int b[5] = { 1, 2, 3, 4, 5 }; //打印内存地址 printf("%x", b); //注意:数组在内存中连续排列的 system("pause"); } 1,在打印内存地址代码后面,右键. 2,选择断点,插入断点. 3,这时断点已经生效. 4,

c#中的里氏转换和Java中强制类型转换在多态中的应用

在c#中: 注意: 子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数. 如果一个子类继承了一个父类,那么这个子类除了可以使用自己的成员外,还可以使用从父类那里继承过来的成员.但是父类永远都只能使用自己的成员,而不能使用子类的成员. 子类之间也不能互相使用对方的成员. 里氏转换的概念: 1).子类可以赋值给父类 2).如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象. namespace 里氏转换_接口练习 { class Program { static void

C#语言(第一部分:内存中的系统)

C#语言: 1.基本常用的类别 Main : 程序的入口点; Console : 控制台; Console.WriteLine :把双引号内的文本内容输出到控制台; Console.ReadLine:从控制台读取一行; string : 字符串; && : 并且 || :或者 (或:同假为假; 并:同真为真;异或:相异为真) if : 如果 elas : 否则 function : 函数 return : 返回 public : 公有的 private : 私有的(默认值) void :

c语言char型常量在内存中是以什么形式存放的

char型常量(字符),在计算机中是按其ASCII值进行存储,ASCII是"整型类"数据,在内存中全部以补码形式进行存放. 补码是一种二进制数据表示形式.整数分为正数.负数和零,计算机设计初期,规定,以字节的最高位表示符号,其余位表示数值,来表示有符号数据,这就是原码.但原码表示法中出现了"正0"和"负0"的表示现象,因此,又研究出来了补码概念,最终用补码来进行数据的存储. 规定: 正数的原码与补码相同. 负数的补码=反码+1, 反码是原码符号位

python中对象初始化放在内存中什么位置

截屏自<Python源码剖析>正文第一页. 也即: 当在其他class中使用 时,node是在堆中的.相当于在C中调用malloc. 不仅仅是对于像Node这样的class 的对象是存在于堆中的,在Python中就连int类型的数值同样是存在在堆中的.因为在Python中就连基本数据类型同样是对象. 让我们思考下Node中的value和self.value这两个变量: 为什么在Node中其他的方法能够调用self.value而不能够调用value? 以前我使用C/C++的思维方法来理解这个问题

java中静态变量在内存中的位置

java程序在内存中的存储分配情况: 一.堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区: 1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问. 3.栈分为3个部分:基本类型变量区.执行环境上下文.操作指令区(存

文件系统的block 数据库中的block 以及内存中的page基础知识汇总(自己理解 可能有误)

1. 操作系统文件系统中的的block 文件系统中的block 是文件系统最小的读写单元,在HDD的磁盘时代, 一般block的大小可能与磁盘的扇区大小一致为 512bytes 也因为这个原因MBR启动的手 0磁道 0扇区的 512bytes 首先加载到内存, 先包含了 446byte的MBR启动信息, 还包含 64bytes 的磁盘分区信息 所以MBR的磁盘格式只支持4个主分区 并且大小仅能够扩展到2TB 后来使用GPT分区的模式可以扩充使用2TB大小以上的磁盘. 操作系统的文件簇大小 可以与

JavaScript中的变量在内存中的具体存储形式

栈内存和堆内存 JavaScript中的变量分为基本类型和引用类型 基本类型是保存在栈内存中的简单数据段,它们的值都有固定的大小,保存在栈空间,通过按值访问 引用类型是保存在堆内存中的对象,值大小不固定,栈内存中存放的该对象的访问地址指向堆内存中的对象,JavaScript不允许直接访问堆内存中的位置,因此操作对象时,实际操作对象的引用 结合代码与图来理解 let a1 = 0; // 栈内存let a2 = "this is string" // 栈内存let a3 = null;

打印出C# 中float ,double 在内存中的存放形式

1 float floatA = 2.2f; 2 uint a = BitConverter.ToUInt32(BitConverter.GetBytes(floatA), 0); 3 for (int i = 0; i < 32;++i ) 4 { 5 uint temp = 0x80000000 & (a << i); 6 if (temp==0) 7 { 8 Console.Write("0 "); 9 } 10 else 11 { 12 Console

面试经常问的C语言变量在内存中的分布(VC6.0)

C/C++变量在内存中的分布在笔试时经常考到,虽然简单,但也容易忘记,因此在这作个总结,以加深印象. 一: #include <stdio.h> #include <malloc.h> int g_i = 100; int g_j = 200; int g_k, g_h; int main() { const int MAXN = 100; int *p = (int*)malloc(MAXN * sizeof(int)); static int s_i = 5; static i