C语言中的一些小知识点

news2024/9/20 8:40:40

一、逗号表达式

说明

在C语言中,逗号表达式是一种特殊的表达式,它允许你将多个表达式串联起来,并且会按照从左到右的顺序依次计算每个表达式,但整个表达式的值是最后一个表达式的值。

一般形式如下:

expression1, expression2, expression3, ..., expressionN;

其中,“expression1, expression2, ..., expressionN“是任意数量的表达式,它们将按照顺序被计算。但是,只有最后一个表达式 “expressionN” 的值会被用作整个逗号表达式的值。

例子

#include <stdio.h>

int main() {
    int a = 5, b = 10, c;
    c = (a++, b++, a + b); // 逗号表达式
    printf("a = %d, b = %d, c = %d\n", a, b, c);
    return 0;
}

在这个例子中,逗号表达式 `(a++, b++, a + b)` 计算的顺序如下:

1. “a++”被计算,”a“ 的值增加1,但表达式的值是 `a` 增加前的值,即5。
2. ”b++“ 被计算,“b” 的值增加1,但表达式的值是 ”b“ 增加前的值,即10。
3. “a + b”被计算,此时 `a` 和 `b` 都已增加1,所以表达式的值是6 + 11 = 17。

因此,最终 `c` 的值是17。

二、用强制类型转换将char转换成double可以吗?

例子

#include <stdio.h>

int main() {
    char c = '3'; // 假设我们有一个字符 '3'
    double d;

    // 将字符 '3' 转换为数字 3.0
    d = (double)c - (double)'0';

    printf("The character '%c' as a double is %f\n", c, d);
    return 0;
}

在这个例子中,我们首先定义了一个 char 类型的变量 c 并赋值为 '3'。然后,我们通过强制类型转换将 c 转换为 double 类型,并且减去字符 '0'double 类型值。这是因为在ASCII码表中,数字字符 '0''9' 是连续的,所以 '3' 的ASCII码值减去 '0' 的ASCII码值就得到了数字3。

三、''和'\61'到底哪个是字符常量

(1)在C语言中,字符常量是用单引号(')括起来的单个字符。字符常量在C语言中通常用于表示单个字符,它们在内存中存储为该字符的ASCII码值。以下是一些关于字符常量的要点:

1. **表示方法**:字符常量必须用单引号括起来,例如 `'A'`、`'B'`、`'5'`、`';'` 等。

2. **数据类型**:字符常量在C语言中是 `char` 类型。

3. **ASCII值**:字符常量在内存中存储的是对应的ASCII码值。例如,字符 `'A'` 的ASCII码值是65。

4. **转义序列**:在单引号中,也可以使用特定的转义序列来表示特定的字符,如换行符(`\n`)、制表符(`\t`)、单引号(`\'`)、反斜杠(`\\`)等。

5. **字符字面量与字符串字面量的区别**:字符字面量是单个字符,而字符串字面量是由双引号括起来的字符序列,如 `"Hello"`。

6. **字符常量的范围**:在C语言中,字符常量的范围是从0到255(对于标准ASCII码),这取决于所使用的字符编码。

7. **字符常量的使用**:字符常量可以用于数组、变量赋值、条件判断等。

下面是一个使用字符常量的简单示例:

#include <stdio.h>

int main() {
    char letter = 'A'; // 定义一个字符常量并赋值
    char newline = '\n'; // 定义一个换行符字符常量
    char backslash = '\\'; // 定义一个反斜杠字符常量

    printf("%c%cThis is on a new line.%c", letter, newline, backslash);
    return 0;
}

在这个例子中,我们定义了三个字符常量:`letter` 存储字符 `'A'`,`newline` 存储换行符,`backslash` 存储反斜杠字符。然后我们使用 `printf` 函数打印它们。输出将会是:

A
This is on a new line.\

请注意,由于反斜杠是转义字符,所以在打印时它后面紧跟的字符会被解释为转义序列的一部分,除非它自身被转义(如 `\\` 表示字面量的反斜杠)。

(2)在C语言中,`\61` 是一个八进制的转义序列,它代表ASCII码值为 61 的字符。八进制转义序列以反斜杠(`\`)开始,后跟最多三个八进制数字(0-7)。在这个例子中,`61` 是一个八进制数,它等价于十进制数 97。

因此,`\61` 表示的字符是小写字母 'a',因为 'a' 的ASCII码值是 97。

这里是一个简单的示例,展示如何使用这个转义序列:
 

#include <stdio.h>

int main() {
    char ch = '\61'; // 使用八进制转义序列定义字符 'a'
    printf("The character is: %c\n", ch);
    return 0;
}

当你运行这个程序时,它会输出:

The character is: a

这证明了 `\61` 确实表示小写字母 'a'。

四、判断"abc\045D\\\0";  "0def\081";  "jkl\\\09A8";  "x\nyz\6"; 的长度

下面我们通过用strlen()函数写一段代码,来解决这个问题。

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "abc\045D\\\0";
    char str2[] = "0def\081";
    char str3[] = "jkl\\\09A8";
    char str4[] = "x\nyz\6";

    printf("Length of \"abc\\045D\\\\\\0\" is %lu\n", strlen(str1));
    printf("Length of \"0def\\081\" is %lu\n", strlen(str2));
    printf("Length of \"jkl\\\\\\09A8\" is %lu\n", strlen(str3));
    printf("Length of \"x\\nyz\\6\" is %lu\n", strlen(str4));

    return 0;
}

在C语言中,"abc\045D\\\0";可以分解成下面这些字符'a'、'b'、'c'、'\045'、'D'、'\'、'\0',其中'\0'在计算字符串长度的时候不计算在内。

 在C语言中,"0def\081";可以分解成下面这些字符'0'、'd'、'e'、'f'、'\0',你可能会问为啥不是'\081',在上面的讲解中我们都知道八进制转义序列以反斜杠(`\`)开始,后跟最多三个八进制数字(0-7)。

在C语言中,"jkl\\\09A8"; 可以分解成下面这些字符'j'、'k'、'l'、'\'、'\0'。

在C语言中,"x\nyz\6";可以分解成下面这些字符'x'、'\n'、'y'、'z'、'\6'。

所以以上代码的输出结果是:

Length of "abc\045D\\\0" is 6
Length of "0def\081" is 4
Length of "jkl\\\09A8" is 4
Length of "x\nyz\6" is 5
请按任意键继续. . .

五、有以下程序描述 double a=22;int i=0; a=a++,i++;a的值是多少?

a=a++,i++;和 a=(a++,i++);有区别吗?

下面是a=a++,i++;的程序

#include <stdio.h>

int main() {
    double a = 22;
    int i = 0;

    // 执行逗号表达式
    a = a++, i++;

    // 打印结果
    printf("a = %f\n", a);
    printf("i = %d\n", i);

    return 0;
}

运行结果如下: 

a = 23.000000
i = 1
请按任意键继续. . .

下面是a=(a++,i++);的程序 

#include <stdio.h>

int main() {
    double a = 22;
    int i = 0;

    // 执行逗号表达式
    a = (a++, i++);

    // 打印结果
    printf("a = %f\n", a);
    printf("i = %d\n", i);

    return 0;
}

运行结果如下:  

a = 0.000000
i = 1
请按任意键继续. . .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读】Slim Fly: A Cost Effective Low-Diameter Network Topology 一种经济高效的小直径网络拓扑

文章目录 Slim Fly: A Cost Effective Low-Diameter Network Topology文章总结1. 摘要2. indroduction3. 主要工作 主要思想references Slim Fly: A Cost Effective Low-Diameter Network Topology Slim Fly&#xff1a;一种经济高效的小直径网络拓扑 SC’14 Maciej Besta 苏…

毕业设计选题:基于ssm+vue+uniapp的农产品自主供销小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

实战OpenCV之图像阈值处理

基础入门 图像阈值处理是一种二值化技术&#xff0c;它基于预设的阈值&#xff0c;可以将图像中的像素分为两大类&#xff1a;一大类是背景&#xff0c;另一大类是前景或目标对象。这个过程涉及将图像中的每个像素值与阈值进行比较&#xff0c;并根据比较结果决定保留原始值还是…

已解决 Termius双击左键复制时,会自动输入Ctrl+C ^C

已解决 Termius双击左键复制时&#xff0c;会自动输入CtrlC ^C 一、问题现象 使用Termius双击左键复制时&#xff0c;会自动输入CtrlC&#xff0c;如图 二、解决办法 查阅了资料&#xff0c;又说是某翻译软件鼠标取词的问题&#xff0c;有说是输入法问题&#xff0c;众说纷纭…

AI免费UI页面生成

https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考&#xff1a;https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似&#xff0c;右侧展示效果和代码 https://pagen.so/

【Python常用模块】_cx_Oracle模块详解

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈…

【代码随想录训练营第42期 Day61打卡 - 图论Part11 - Floyd 算法与A * 算法

目录 一、Floyd算法与A * 算法 1、Floyd算法 思想 伪代码 2、 A * 算法 思想 伪代码 二、经典题目 题目一&#xff1a;卡码网 97. 小明逛公园 题目链接 题解&#xff1a;Floyd 算法 题目二&#xff1a;卡码网 127. 骑士的攻击 题目链接 题解&#xff1a;A * 算法&a…

基于java的工费医疗报销管理系统设计与实现

博主介绍&#xff1a;专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

单细胞BisqueRNA和BayesPrism去卷积分析工具简单比较

曾老师发来了一个工具&#xff0c;BisqueRNA&#xff0c;这个工具也可以用于单细胞/bulk数据的反卷积~ 因此本次就对这两个工具简单测评一下 ~ 生信菜鸟团&#xff1a;https://mp.weixin.qq.com/s/3dZQxDdY6M1WwMMcus5Gkg 笔者也曾经写过一个推文简单的介绍过&#xff0c;有…

C++的初阶模板和STL

C的初阶模板和STL 回顾之前的内存管理&#xff0c;我们还要补充一个概念&#xff1a;内存池 也就是定位new会用到的场景&#xff0c;内存池只会去开辟空间。 申请内存也就是去找堆&#xff0c;一个程序中会有很多地方要去找堆&#xff0c;这样子效率会很低下&#xff0c;为了…

必知的PDF转换软件:看2024大学生如何选择

你翻翻你文件的下载记录&#xff0c;是不是PDF文件占了大多数&#xff1f;很多是为了保证页面版式直接收到打印手填再扫描或者直接提交。但是如果能够直接在电脑上编辑之后直接转发或者打印是不是方便了很多&#xff1f;这次我就介绍几款可以进行PDF转换操作的工具&#xff0c;…

高效开发,从暗藏玄机的文件系统开始

4G-Cat.1模组的文件系统关乎数据传输速度、存储效率&#xff0c;以及数据安全性等等诸多因素&#xff0c;在应用开发中极为重要。 本期&#xff0c;我们来学习合宙Air201的实用示例——文件系统的使用 Air201文件系统的使用 合宙Air201资产定位模组——是一个集成超低功耗4G通…

AntFlow系列教程之流程拒绝

这是开源项目AntFlow的一个系统入门使用教程.AntFlow是一款开源免费的企业级低代码工作流引擎.仿照钉钉设计,极大降低流程设计、开发和维护成本。详细介绍请查看历史文章&#xff1a;AntFlow开源仿钉钉低代码工作流平台集成RuoYi版本来啦 流程拒绝和流程同意提交的参数是一样的…

Ubuntu20.04 搜索不到任何蓝牙设备

电脑信息 联想扬天YangTianT4900k 问题描述 打开蓝牙之后&#xff0c;一直转圈&#xff0c;搜索不到任何蓝牙设备 排查 dmesg | grep -i blue 有如下错误&#xff1a; Bluetooth: hci0: RTL: unknown IC info, lmp subver 8852, hci rev 000b, hci ver 000b lsusb 芯片型号如…

MySQL数据库的使用

MySQL数据库的启停 先用管理员身份进入系统终端&#xff0c;然后再在终端中输入命令 启动 net start mysql84&#xff08;你所安装的MySQL版本名称&#xff09; 停止 net stop mysql84 不知道所安装的MySQL是什么版本&#xff1f;&#x1f447; 首先打开cmd命令窗口&…

sqli-labs靶场搭建

下载了一个phpstudy进行搭靶场搭建 然后打开phpstudy安装好php,mysql等环境 正式sqli-labs靶场搭建 第一步&#xff1a;下载源码&#xff1a;https://codeload.github.com/Audi-1/sqli-labs/zip/master 解压后放进网站根目录&#xff0c;进到 sqli-labs的文件夹下&#xff0…

分享6个.NET开源的AI和LLM相关项目框架

前言 现如今AI应用的发展可谓是如火如荼的&#xff0c;它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享6个.NET开源的AI和LLM相关的项目框架&#xff0c;希望能为大家提供一些参考。如果你有更好的推荐&#xff0c;欢迎RP投稿或文末留言。 https://github.c…

虚拟机之与物理机进行文本的复制粘贴

打开终端&#xff08;快捷键CtrlAltt&#xff09;。&#x1f5a5;️ 安装Open VM Tools&#xff0c;输入以下命令&#xff1a; sudo apt-get install open-vm-tools-desktop -y安装这个工具包可以增强虚拟机的功能&#xff0c;包括支持主机与虚拟机之间的复制粘贴&#xff0c;…

台球瞄准的投掷效应或者耦合效应

https://www.zhihu.com/question/27659022 怪不得理论上算的角度, 实际上打总是便宜, 原来这里面还有两个球之间的摩擦.也就是: 老师&#xff0c;这是您八年前的提问。我个人理解是&#xff1a;目标球会跟着主球往同一个方向走。打个比喻就是“目标球”会坐上“主球”的“火车”…

info 命令:查看命令手册

一、命令简介 在 Linux 系统中&#xff0c;可以使用 man​ 查看普通的帮助手册。还可以使用 info​ 命令阅读 Info 格式的文档。 ​info​ 文档的特点&#xff1a;大量使用超链接&#xff0c;通过方向键将光标移动到链接的文字&#xff0c;按下回车键&#xff0c;就可以切换到…