当前位置: 首页 > article >正文

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)则是可以出现在赋值语句右边的表达式,它通常是一个常量、一个表达式的计算结果等,是用来提供数据给左值进行赋值操作的。


http://www.kler.cn/a/415023.html

相关文章:

  • python实现TCP服务端,支持对所有客户端的数据收发,支持终端自定义命令操作,提供clear命令一键断开所有的客户端连接
  • 在 Spring Boot 中实现多种方式登录(用户名、手机号、邮箱等)的不正经指南
  • Hive构建日搜索引擎日志数据分析系统
  • 将excel文件中的信息读取后批量生成word文件
  • 鸿蒙ArkUI-X已更新适配API13啦
  • ubuntu中使用ffmpeg和nginx推http hls视频流
  • 网站怎么防御https攻击
  • 基于java web的网上书店系统设计
  • 云原生革命:构建未来应用的无限可能
  • Android 性能优化:内存优化(理论篇)
  • 解析大带宽服务器:推动高流量时代的关键力量
  • ASP.NET Core Web API 控制器
  • 11、PyTorch中如何进行向量微分、矩阵微分与计算雅克比行列式
  • MySQL - 表的增删查改
  • 思科实现网络地址转换(NAT)和访问控制列表(ACL)和动态路由配置并且区分静态路由和动态路由配置。
  • Vue3 调用子组件的方法和变量
  • 重学 Android 自定义 View 系列(九):侧边字母选择器
  • c++设计模式模块与系统
  • 机器学习之RLHF(人类反馈强化学习)
  • 11.22Pytorch_自动微分