强制类型转换:int num = '1234';
总结
由int num = '1234';是否能编译、输出结果问题,引发了一系列的问题。
按照以往的知识储备,我认为字符类型变量赋值给int整型变量,这是字符类型强转为int类型。那么强转的概念又是什么呢?
百度词条给出这样的定义:
基本数据类型有:1.整型:byte,short,int,long 2.浮点型:float,double 3.逻辑型:boolean 4.字符型:char
按照百度词条的定义分析:num是int类型,它是基本数据类型,那么它并不属于强制类型转化。
再看百度百科里给出的例子:
那么问题来了,int类型是基本数据类型,那它举的例子,并不满足给出的定义,存在争议。
数据类型转化应该是内存中的数据存入与读取时,字节大小或分配方式(结构体之间的转化)发生了变化,才应该算是强制转化。
与操作数是否为基本数据类型无关。并且int a = '1234'并非强制转化。
我并没有找到绝对的定义,那么我最初学习的“强制类型转换”这个定义又是由谁来给出的呢?
问 | 答 | 测 |
---|---|---|
是否能够编译成功? | 能成功 | 编译运行成功 |
如果编译成功,单引号中的数据如何存储至内存? | 字符类型可以被强转成int类型 | '1234'在内存中的表现形式为:31323334,读取时将4个字节作为一个整体读出赋值给num变量。此时没有空间变化,所以没有转化的过程 |
num值是多少? | num的值应该是1234分别转为ascii值,然后读取,其中可能有大小端转化问题吧? | ![]() |
如果将单引号变为双引号,结果是否一致? | 这个不清楚,很少使用 | 不一致,编译报错了 |
单引号和双引号的区别是什么? | 单引号是字符,双引号是字符串 | 单引号在内存中是该字符以ascii码形式存储在内存中,双引号会在末尾加上'\0',它们不一样 |
为char类型赋值时,等号右边是“a”,是否能够成功?结果是否正常? | 可以,等号右边只有一个字符 | ![]() |
如果‘1234’变成‘12345’呢? | 应该能成功,最多是强转时,一部分数据被截断 | ![]() |
如果int类型变为short呢? | short类型只有两个字节,应该只能得到‘12’的值 | ![]() |
分类:
Linux C开发学习
标签:
琐碎知识点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】