c语言数据类型后续

一、变量赋值

赋值有两种方式

1、赋初值(初始化,是在变量开辟空间的时候i,并伴随着 赋值)eg.int i = 10

2、赋值 (空间早就开好了,然后之后再赋值进去)eg.i=10

比较:初始化效率比赋值效率更高。

注意

变量不赋值,其会随机分配一段空间,其值也是随机

二、运算符

在学习过程中,要注意运算符和表达式,学习时注意样式干什么用,优先级。

常见运算符以及作用如下

部分知识点解释如下

  • 结合方向是指同等级的情况下,结合方向自左向右
  • 操作数,操作符(1(左操作数/一运算数)+2(右操作数/2运算数))
  • 需要两个操作数的运算符称为双目运算,其他的依次类推
2.1 除法

i/j除法运算的符号,注意在此时分母不能为0,在Linux里面该过程,在编译不报错,但是在运行的时候报错。

2.2 求余

和除法一样,注意分母不能为0,求余左右两个操作数要求必须是整型或者相兼容的数据类型(char型)

注意

i % j 求余运算的符号,与左操作数有关,与右操作数无关

求余运算符的特性

结论:求余表达式的结果最大到达右侧表达式的数值,但是达不到该数字。

2.3 ++

1、++ 自增对于浮点型也适用,字符型也适用,分为两种

  • i++(单目) 先用再加
  • ++ i(单目)先加再用

2、底层原理:++i ,i 同一个空间,在单纯希望自增+1,前++效率高于后++

3、图示分析++i,与i++的本质区别,以及为什么值的改变过程

所以,i++ 表达式是临时变量,但i加了。

注意点以及常见问题

  • i++ +i++ 注意在同一段里面不要反复++,这样的做法不友好。
  • --i,i--与++原理一致,我们可以相同对待
  • lvalue(left value)左值 locatable 能够在内存中定位的,都是左值。能够取到地址,&i 则说明为左值
  • rvalue(right value)右值 readable 不能够在内存中定位的,都是右值。
  • 左值和右值基准点,在c/c++里面的基准点是=(赋值左边只能放变量名,右值常量只能放在右边,函数表达式)
  • 左值可以改变,右值不能发生改变,
  • 临时变量是一个右值,不能拿来被赋值,以及不能拿来进行自增改变。
  • ++i++ 写法不规范引起的错误;i++ 是一个临时变量,值不能改变,和常量的一样,不能发生改变,所以不能拿来自增。++i所以此时此刻的i 为常量。不能再自加。

面试题

  • const int i = 2;
  • const 常量(constant) 定义后 i不能发生改变了。
  • 在Linux里面 const int i = 2;i是可以取地址,因为本质上i是一个变量。
2.4 各类数值型数据间的混合运算

隐式转换

(出现级别差/或者存在必转类型)

显示转换

类型转换符)强制类型转换:进行临时转换类型,造出级别差,导致整个表达式能够达到预期的目标。eg:(double)i / j

这种强制只是临时的,会开辟一个临时变量区,最后会消除掉,因此不能这样干 (int) i = 100;这样是错误的。并不会改变原来的结果。

printf()函数:默认在小数点后面输出6位有效数字。超过的数字会进行四舍五入。

常见错误以及注意点

unsigned 类型都是恒大于0,我们经常忽视这个问题,造成结果与预期有差距。

2.5 不同数据类型之间的混合赋值
  1. double = int (因为double本来就既包含整数又有小数)   不会发生任何错误
  2. int = double 小数部分截断   这种只保留整数
  3. short = int s装不下,高位截断(低位保留,高位丢弃)
  4. int = short  (符号位扩展) 可以装下,正整数多出来的空位补为0高位,负的,多出来补FF高位,总的来说补的就是该数的符号位。
  5. unsigend int = int 只要内存空间一样大,直接拿来拷贝
  6. % d 有符号 输出    % u 无符号 输出  这两者是来显示我们表示的形式。
  7. int = unsigende short 扩展的高位还是取决与符号位,因为是无符号类型,则其没有符号位,是数值,则将其补0
  8. 逗号表达式(顺序求职运算符)从左往右运算按顺序求解ret =(1+2,3 * 8 ,7 -4 );最后结果是最右边的表达式

注意

printf(0),这个括号是函数运算符,是调用函数运算符

不带上()的话,会将3赋给ret 因为赋值运算符优先级高于,如下图所示。

三、学习心得

在学习该过程的时候我遇到的问题如下:

  • 对于C语言每一个表达式都有自己的类型,所以在写表达式的时候注意数据类型
  • 编译器只做类型检查
  • 所以字母为0,相除不报错
  • 编写代码的错误
  • 编译时,运行时没有错误
  • 编译时有警告,运行正常
  • 编译时error,运行失败
  • 编译时没有问题,运行时候出错 (浮点型出错),cpu会根据其出错,直接终止,称为程序的奔溃
  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值