C语言第十三周课——重点考点知识
目录
1.bool数据类型
2.ASCII码
3. 自增(减)前后缀
4.绝对值函数
5.字符数组赋值问题
1.bool数据类型
C语言中没有定义true和false
C语言用0表示false,用非0(不止1)表示true
2.ASCII码
输出值为:97,是a对应的ASCII码
char c = 'a'; printf("%d",c); //输出值为:97,是a对应的ASCII码
输出值为:c
char c = 'a'; printf("%c\n",c);
小写字母的ASCII码值比相应的大写字母ASCII码值大32
3. 自增(减)前后缀
x++与++x#include<stdio.h> int main(){ int x=0,y=1,z=1,j=0; x=z++ + z; j=++y + y; printf("x is %d\n",x);//输出结果为3 printf("j is %d\n",j);//输出结果为4 return 0; }
对x的赋值操作分析:
这里涉及后置自增运算符
++
。后置自增的运算规则是:先使用变量当前的值参与表达式运算,然后再将变量的值加1
。当执行这行代码时:
- 首先,对于表达式
z++ + z
,会先使用z
的当前值(此时z
初始值为1
)进行加法运算,也就是先计算1 + z
。- 然后,
z
的值会自增1
,变为2
。此时前面计算的式子就变成了1 + 2
,结果为3
。- 最后,将这个结果
3
赋值给x
对j的赋值操作分析:
这里涉及前置自增运算符
++
。前置自增的运算规则是:先将变量的值加1
,然后再使用更新后的值参与表达式运算。当执行这行代码时:
- 首先,
y
的值会自增1
,此时y
变为2
。- 然后,计算
++y + y
,也就是2 + 2
,结果为4
。- 最后,将这个结果
4
赋值给j
。在VC6中x输出结果为2,这是为什么呢?
VC6 是一款比较古老的编译器,它在处理某些运算符的优先级和求值顺序等方面存在一些不符合现代 C 语言标准的情况。
在这个具体例子中,VC6 编译器可能没有严格按照 C 语言标准规定的后置自增运算符的求值顺序来执行。它可能是先对
z
进行了自增操作,使得z
变为 2,然后再进行加法运算,也就是计算2 + 2
,这样就得到了 2 这个结果,而这与现代 C 语言标准所要求的求值顺序是不一致的。
4.绝对值函数
注意math.h中有两个绝对值函数,一个是abs(),另一个是fabs()
其中前者是处理整型变量的,而后者是处理浮点型变量的
#include <stdio.h> #include <stdlib.h> // 用于 abs() 函数 #include <math.h> // 用于 fabs() 函数 int main() { int num1 = -5; double num2 = -3.14; // 使用 abs() 函数处理整数 int abs_result1 = abs(num1); printf("整数 %d 的绝对值(使用 abs())是:%d\n", num1, abs_result1); // 使用 fabs() 函数处理浮点数 double fabs_result2 = fabs(num2); printf("浮点数 %.2f 的绝对值(使用 fabs())是:%.2f\n", num2, fabs_result2); return 0; }
5.字符数组赋值问题
//正确声明 char c[12]="HelloWorld!"; //错误声明 char c[12]; c = "HelloWorld!";
错误声明报错: error C2106: '=' : left operand must be l-value
翻译:赋值操作符(=)左边的操作数必须是一个可修改的左值(l-value)原因:
在 C 语言中,数组名在大多数情况下被当作一个常量指针,它指向数组的首元素地址,是不可以被重新赋值的。也就是说,数组名本身在这里不是一个左值,不能像普通变量那样直接通过赋值操作符(=
)来赋予新的值。
什么是左值什么是右值?左值(l-value)是指可以出现在赋值语句左边的表达式,它代表一个可被修改的内存位置。简单来说,就是能够被赋值的东西,比如变量名就是典型的左值。而右值(r-value)则是可以出现在赋值语句右边的表达式,它通常是一个常量、一个表达式的计算结果等,是用来提供数据给左值进行赋值操作的。