首页 > 其他分享 >C语言类型与强制类型转换

C语言类型与强制类型转换

时间:2024-09-19 23:02:40浏览次数:1  
标签:类型转换 字符 int C语言 printf 类型 强制 123456 sizeof

目录

类型

  • C语言为何有类型? 让我们能够对内存进行合理化划分,按需索取,存在类型的目的就是让我们能合理使用内存空间
  • 类型为什么有这么多种? 实际应用场景很多种,应用场景不同,解决对应的应用场景的计算方式不同,需要空间的大小也是不同的.多种类型目的是让我们能以最下成本解决多样化的场景问题.

例如: 登记成绩,成绩只要0-100分,那使用一1个字节int8_t/char就足够. 如果带浮点,则需要浮点型.

关键字sizeof

sizeof是函数还是关键字?

  1. 证明1:
int a = 10;
printf("%d\n",sizeof(a));    //正确用法
printf("%d\n",sizeof(int));  //正确用法
printf("%d\n",sizeof a );    //正确用法,证明sizeof不是函数
printf("%d\n",sizeof int );  //不存在
  1. 证明2:函数调用栈帧中sizeof不会压栈

函数执行会建立栈帧,sizeof不会; 具体见函数栈帧篇

如何理解强制类型转化

强制类型转化:不改变数据本身,只改变数据的类型

  • "123456" -> int:123456
字符串"123456"如何转化成整型值123456,能强转吗? 答案是不能,只能通过算法进行转化

因为"123456"的空间至少占了7个,而整型int只占4个字节.
  • 不同类型的0
printf("%d\n",0);
printf("%d\n",'\0');
printf("%d\n",NULL); //(void*)0

不同类型的0

字符设备

(补充) char有有符号和无符号两种类型,字符是无符号类型.

(补充) getchar的返回值为什么是int

如果getchar返回值是char,因为char只能表示0-255个字符,刚好包含所有ascii码,如果getchar失败,则没有多余的位置返回错误信息.因此getchar返回值设计成int,int既能转化成字符,还有多余的数值当作错误码来使用.

键盘输入的内容,以及往显示器中打印的内容,都是字符 --> 键盘/显示器称为字符设备

验证:printf scanf的返回值是输出和输入的字符数.

标签:类型转换,字符,int,C语言,printf,类型,强制,123456,sizeof
From: https://www.cnblogs.com/DSCL-ing/p/18414572

相关文章

  • 【C语言二级考试】循环结构设计
    C语言二级考试——循环结构程序设计五.循环结构程序设计1.for循环结构2.while和do-while循环结构3.continue语句和break语句4.循环的嵌套知识点参考【C语言】循环-CSDN博客文章目录1.for循环2.while和do-while循环结构3.continue语句和break语句4.循环的嵌套......
  • C语言程序设计(进阶)
    肆意张扬的我们都不会是烂尾的诗集。2.整型在内存中的存储我们之前讲过一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同类型而决定的。2.1原码、反码、补码数值有不同的表现形式:2进制、8进制、10进制、16进制其中整数的2进制表示也有三种形式:原码、反码、......
  • C语言程序设计(进阶)
    行到水穷处,坐看云起时。中秋快乐呀!数据在内存中的存储1.数据类型的介绍(1)基本的内置类型:·char       //字符数据类型·short     //短整型·int        //整型·long       //长整型·longlong  //更长的整......
  • c语言 宏的一些深层应用(##,#,宏函数)
    "##"宏拼接#defineCONCATENATE(a,b)a##bCONCATENATE(student_,1) //将a和b拼接起来变成一个新的变量->student_1#defineCONS(a,b)int(a##e##b)CONS(2,3) //将aeb拼接起来->2e3==2000"#"转换为字符串#defineCONCATENATE(a,b)a##b#defineSTR......
  • 【C语言】联合体&&枚举的讲解
    目录✨声明!!!:联合体与结构体只有一个区别,那就是内存存储方式不同......
  • C语言指针进阶笔试题(含解析)
    笔试题1:intmain(){ inta[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); return0;} 解析:*(a+1),a是首元素的地址,加1之后就是第二个元素的地址,解引用就是2。ptr是&a+1,取出的是整个数组的地址,加1跳过整个数组:强转为int......
  • Java 数据类型转换详解:隐式转换(自动转换)与强制转换(手动转换)
    目录前言取值范围从小到大的关系:隐式转换(自动转换)......
  • c语言学习---指针
    1.计算机内存划分为一个个内存单元,每个内存单元占1字节,而每个内存单元都有一个特点的编号,称为地址,也称为指针,通过指针可以找到对应的内存单元并调用内存单元内存放的数据.2.指针变量:存放指针的变量称为指针变量,表示形式如下:指向数据类型*变量名,通过*(解引用操作符)操作指针变......
  • c语言学习---操作符
    1.算术操作符:+ -  *  /  %,加减乘与数学上的算法相同,但 / 在运算两个整型数据时,算的是整数除法,不会四舍五入,只取整数部分,要算小数运算两个操作数至少要有一个浮点型数据.2.%(整型取模操作符)算的是两个整型操作符的余数,浮点数不能计算.3.单双目操作符:定义操作......
  • 扩展分析C语言单双引号、反斜杠与注释
    目录注释奇怪的注释C风格的注释无法嵌套一些特殊的注释注释的规则建议反斜杠'\'反斜杠有续行的作用,但要注意续行后不能添加空格回车也能起到换行的作用,那续行符的意义在哪?反斜杠的转义功能单引号和双引号字面值,字符串,字符,字符变量的大小为什么sizeof('1')的大小是4?char类型一......