C Primer Plus 学习笔记

1

当printf()使用%c打印336时, 它只会查看储存336的2字节中的后1字节,这种截断(见图4.8)相当于用一 个整数除以256,只保留其余数。以为%c取值为无符号数,故不需要进行关于正负号的改变

#2:

#include <stdio.h>
int main()
{
    long long a=65565462;
    int b=54152;
    int c=54521;
    printf("%d,%d,%d",a,b,c);
    

return 0;
}

输出结果为  65565462,0,54152,由此可以证明

1:在初始化一个变量的第一步是格式化这个内存空间

2:printf函数实现输出是先以“”将外的变量在内存中排序,然后再以转换说明依次读取相应大小的空间进行输出

#3:printf()函数也有一个返回值,它返回打印字符的个数,注意计算针对所有字符数,包括空格和不可见的换行符(\n)。如果有输出错误, printf()则返回一个负值

#4:连接两个字符串可以使用两个” “,如”young “  “girl”等价于"young girl"

#5:scanf()把输入的字符串转换成整数、浮点数、字符或字符串,而 printf()正好与它相反,把整数、浮点数、字符和字符串转换成显示在屏幕上 的文本。

#6:scanf()函数返回成功读取的项数。如果没有读取任何项,且需要读取一 个数字而用户却输入一个非数值字符串,scanf()便返回0。当scanf()检测 到“文件结尾”时,会返回EOF

#7:*在printf中的作用  如:printf("%*.*f",(参数一),(参数二),(参数三)),其中参数一二是对*所代表的数进行修饰,即控制字宽和精度。scanf()中*的用法与此不同。把*放在%和转换字符之间时,会使得 scanf()跳过相应的输出项

#include int main(void)

{ int n;

printf("Please enter three integers:\n");

scanf("%*d %*d %d", &n);

printf("The last integer was %d\n", n);

return 0; } scanf()跳过两个整数,把第3个整数拷贝给n。 下面是一个运行示例:

Please enter three integers:

2013 2014 2015     //用户输入

 The last integer was 2015    //在程序需要读取文件中特定列的内容时,这项跳过功能很有用

#8:,C 的标准数学库提供了一个pow()函数用于指数运算,例如,pow(3.5, 2.2)返回3.5的2.2次幂)。

#9:注意,整数除法会截断计算结果的小数部分(丢弃整个小数部分),不 会四舍五入结果。混合整数和浮点数计算的结果是浮点数

#10:在C99中:如果第1个运算对象是负数,那么求模的结 果为负数;如果第1个运算对象是正数,那么求模的结果也是正数  例如:

11 / 5得2,11 % 5得1         11 / -5得-2,11 % -2得1         -11 / -5得2,-11 % -5得-1        

-11 / 5得-2,-11 % 5得-1

如果当前系统不支持C99标准,会显示不同的结果。实际上,标准规 定:无论何种情况,只要a和b都是整数值,便可通过a - (a/b)*b来计算a%b。

#11:如果一个变量出现在一个函数的多个参数中,不要对该变量使用递增或 递减运算符; 如果一个变量多次出现在一个表达式中,不要对该变量使用递增或递减 运算符。

#12:有赋值运算符(=)的表达式的值,这些表达式的值与赋值运算符左侧变量的值相同。因此,表达式q = 5*2 作为一个整体的值是10。

#13:序列点(sequence point)是程序执行的点,在该点上,所有的副作用都 在进入下一步之前发生。在 C语言中,语句中的分号标记了一个序列点。另外,任何一个完整表达式的结束也是一个序列点。什么是完整表达式?所谓完整表达式(full expression),就是指这个表达式不是另一更大表达式的子表达式。例如,表达式语句中的表达式和 while循环中的作为测试条件的表达式,都是完整表达式

#14:.在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。

#15:在C语言中,许多类型转换都是自动进行的。当char和short类型出现在 表达式里或作为函数的参数(函数原型除外)时,都会被升级为int类型; float类型在函数参数中时,会被升级为double类型。在K&R C(不是ANSI C)下,表达式中的float也会被升级为double类型。当把一种类型的值赋给 另一种类型的变量时,值将被转换成与变量的类型相同。当把较大类型转换 成较小类型时(如,long转换成short,或 double 转换成 float),可能会丢失 数据。根据本章介绍的规则,在混合类型的运算中,较小类型会被转换成较 大类型。 定义带一个参数的函数时,便在函数定义中声明了一个变量,或称为形 式参数。然后,在函数调用中传入的值会被赋给这个变量。这样,在函数中 就可以使用该值了。

#16:关系运算符的优先级比算术运算符(包括+和-)低,比赋值运算符高。关系运算符之间有两种不同的优先级。 高优先级组:>= 低优先级组: ==  != 。关系运算符的结合律也是从左往右。

#17:逗号运算符并不局限于在for循环中使用,但是这是它最常用的地方。 逗号运算符有两个其他性质。首先,它保证了被它分隔的表达式从左往右求 值(换言之,逗号是一个序列点,所以逗号左侧项的所有副作用都在程序执 行逗号右侧项之前发生)。整个逗号表达式的值是右侧项的值

#18:

#19:!运算符的优先级很高,比乘法运算符还高,与递增运算符的优先级相 同,只比圆括号的优先级低。&&运算符的优先级比||运算符高,但是两者的 优先级都比关系运算符低,比赋值运算符高。C保证逻辑表达式的求值顺序是 从左往右。&&和||运算符都是序列点,所以程序在从一个运算对象执行到下 一个运算对象之前,所有的副作用都会生效。而且,C 保证一旦发现某个元 素让整个表达式无效,便立即停止求值。正是由于有这些规定,才能写出这 样结构的代码: while ((c = getchar()) != ' ' && c != '\n')

#20: 条件运算符需要3个运算对象,每个运算对象都是一个表达式。其通用 形式如下: expression1 ? expression2 : expression3 如果expression1为真,整个条件表达式的值是expression2的值;否则, 是expression3的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值