C语言学习阶段汇总

阶段问题汇总

字符串

字符串在内存中是连续存储的

字符串的变量名是字符串第一个元素的地址的别名

这代表这这个变量名是常量地址,无法改变

但是可以参与到表达式中

类如

char s[]="abcde";
printf("%s",s+2)
    
/*将会输出cde,首地址往后偏移两位的值*/

字符串的终结符

字符串在C语言中只能依靠终结符’/0’来结束

C语言无法停止识别没有终结符的字符串

定义字符串时,C语言会自动加入终结符’/0’在末尾

sizeof()和strlen()的区别

sizeof()会得到所有数据的长度

strlen()只能获取字符串的长度,且遇到终结符’/0’自动停止

故,二者获取同一字符串的长度得到的值会不一样

char s[]="abc";
printf("%d %d",sizeof(s),strlen(s));
/*实际输出结果为4,3,区别在于一个识别到了终结符,一个识别到终结符停止了*/

运算时不同类型的数据如何转换

在C语言中,不同类型的数据如果要进行运算,必须转换为同一种类型的数据

因为在计算机中,int型变量运算最为简便,故所有低于int的数据类型在运算中会被转换为int型,这个过程被称为整型提升

其余变量进行运算时会根据有效数据位的大小进行转换,为了确保精度不丢失,所有的变量都会往高精度的数据类型进行转换,高精度也就代表着有效数据位越多

赋值也是一种运算,但是这个运算是用户自定义的,不遵循自动转换的规则,但遵循整型提升

强制转换数据类型就会按照下面的规则进行转换

长短不一的数据如何赋值

  • 长的数据赋值给短的数据

    • 低字节直接拷贝,高字节直接丢弃
  • 短的数据赋值给长的数据

    • 如果短的是有符号位的,高位补符号位,如果是负的,补完1之后,按位取反还是0,不影响数值
    • 如果短的是无符号位的,高位补0

对于负数来说,以补码形式存储,按符号位补1,就是对数值补0,对数值不造成影响

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值