《C语言深度剖析》第一章 关键字详解 p3 C语言从入门到入土(进阶篇)(二)

简介: 1.switch case 组合 对于switch && case && break && default 的总结 2.getchar 3.putchar 4.do、while、for 关键字 break && continue 区别 5.goto 关键字 6.void 关键字 6.1 void修饰函数返回值和参数 6.1.2 void用来作为函数返回值 6.1.3 void 作为函数参数 6.2 void 指针 6.3 void * 定义的指针变量可以进行运算操作吗 6.4 void * 用来设计通用接口

3.putchar

97.png


简单说就是从键盘写一个字符到流也就是显示器上面。

头文件:

98.png

99.png

用法:

100.png


总结:

putchar() 向终端输出一个字符。其格式为putchar(ch),其中ch可以是被单引号(英文状态下)引起来的一个字符,可以是介于0~127之间的一个十进制整型数(包含0和127)(超过127就不是ASCII码了),也可以是事先用char定义好的一个字符型变量 当c为一个被单引号(英文状态下)引起来的字符时,输出该字符(注:该字符也可为转义字符 ), 当c为一个介于0~127(包括0及127)之间的十进制整型数时,它会被视为对应字符的ASCII代码,输出该ASCII代码对应的字符; 当c为一个事先用char定义好的字符型变量时,输出该变量所指向的字符。 当整型变量ch超出8位变量的范围时,ch则会变强制转化为8位变量(即取其低八位传过去输出),当为负数的时候,由于计算机存储负数是用补码表示的,所以传过去的二进制补码也被当做正数处理,也是取其低八位。


4.dowhilefor 关键字

//while
条件初始化
while ( 条件判定 ){
// 业务更新
条件更新
}
//for
for ( 条件初始化 ; 条件判定 ; 条件更新 ){
// 业务代码
}
//do while
条件初始化
do {
条件更新
} while ( 条件判定 );

然后补充:while循环和for循环都是先判定后使用,但是do while循环是先使用后判定。


break && continue 区别

break是跳出本次循环,continue是跳过本次循环 直接到判定部分。下面的图就可以接解释:

101.png


5.goto 关键字


直接跳转到标记部分,



102.png


但是会有一些问题,如跳过一些代码,又或者死循环,又或者可读性差等。所以一般新手不用。


我的建议


很多公司确实禁止使用goto,不过,这个问题我们还是灵活对待,goto在解决很多问题是有奇效的。

我们可以认为goto使用场景较少,一般不使用。但是必须得知道goto,需要的时候,也必须会用


有人用吗

103.png


Linux内核源代码中充满了大量的goto,只能说我们目前,或者很多公司的业务逻辑不是那么复杂


6.void 关键字

//void 是否可以定义变量

#include <stdio.h>

#include <windows.h>

int main()

{

void a;

system("pause");

return 0;

}

// 在 vs2013 和 Centos 7 , gcc 4.8.5 下都不能编译通过


为何 void 不能定义变量

定义变量的本质:开辟空间

而 void 作为空类型,理论上是不应该开辟空间的,即使开了空间,也仅仅作为一个占位符看待

所以,既然无法开辟空间,那么也就无法作为正常变量使用,既然无法使用,编译器干脆不让他定义变量。

在 vs2013 中, sizeof(void)=0

在 Linux 中, sizeof(void)=1 (但编译器依旧理解成,无法定义变量)



6.1 void修饰函数返回值和参数


6.1.2 void用来作为函数返回值


如果自定义函数,或者库函数不需要返回值,那么就可以写成 void,这是我们常用的哈。

那么问题来了,可以不写吗?不可以,自定义函数的默认返回值是 int( 这个现场验证 )

所以,没有返回值,如果不写 void ,会让阅读你代码的人产生误解:他是忘了写,还是想默认 int ?


6.1.3 void 作为函数参数


#include <stdio.h> 
#include <windows.h> 
int test1() //函数默认不需要参数 
{ 
    return 1; 
}
int test2(void) //明确函数不需要参数 
{ 
    return 1; 
}
int main() 
{ 
    printf("%d\n", test1(10)); //依旧传入参数,编译器不会告警或者报错 
    printf("%d\n", test2(10)); //依旧传入参数,编译器会告警(vs)或者报错(gcc) 
    system("pause"); 
    return 0; 
}


结论:如果一个函数没有参数,将参数列表设置成 void ,是一个不错的习惯,因为可以将错误明确提前发现。

/ 另外,阅读你代码的人,也一眼看出,不需要参数。相当于 " 自解释 " 。

当然不习惯也没关系,作者也不喜欢写哈哈。


6.2 void 指针

void 不能定义变量,那么 void* 呢?

经过测试发现是可以的,为什么呢?

因为 void*是指针,是指针,空间大小就能明确出来(4/8)。

作用: void* 能够接受任意指针类型。

这是我们在指针学习的时候通常能用到的。


104.png105.png


 结论:但是我们依旧认为,void*的作用是用来接受任意指针类型的。这块在后面如果想设计出通用接口,很有用,比如:void * memset ( void * ptr, int value, size_t num );


6.3 void * 定义的指针变量可以进行运算操作吗

06.png


为什么在不同的平台下,编译器会表现出不同的现象呢?

根本原因是因为使用的C标准扩展的问题。


PS:GNU计划,又称革奴计划,是由 Richard Stallman( 理查德 · 斯托曼 ) 在 1983 年 9 月 27 日公开发起的。它的目标是创建一套完

全自由的操作系统。它在编写 linux 的时候自己制作了一个标准成为 GNU C 标准。 ANSI 美国国家标准协会 , 它对 C 做的标准

ANSI C 标准后来被国际标准协会接收成为 标准 C 所以 ANSI C 和标准 C 是一个概念,总体来说现在 linux 也支持标准 C ,以

后标准 C 可以跨平台,而 GUN c 一般只在 linux c 下应用。 -- 来自百度

Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。 GNU

C 对标准 C 进行一系列扩展,以增强标准 C 的功能。 -- 来自百度

一句话,大部分编译器是标准 C ,而 Linux 下是扩展 C , Linux 平台也能保证标准 C 的运行。


6.4 void * 用来设计通用接口

106.png

今天的内容就到这里了哈!!!

要是认为作者有一点帮助你的话!

就来一个点赞加关注吧!!!当然订阅是更是求之不得!

最后的最后谢谢大家的观看!!!

你们的支持是作者写作的最大动力!!!

下期见哈!!!

相关文章
|
2月前
|
C语言
【C语言】break 关键字详解
- `break` 关键字用于提前退出循环体或 `switch` 语句的执行。 - 在 `for`、`while` 和 `do-while` 循环中,`break` 可以帮助程序在满足特定条件时退出循环。 - 在 `switch` 语句中,`break` 用于终止 `case` 代码块的执行,避免代码“穿透”到下一个 `case`。 - 注意 `break` 只会退出最内层的循环或 `switch` 语句,确保在嵌套结构中正确使用 `break` 以避免意外的控制流行为。
137 2
|
2月前
|
传感器 安全 编译器
【C语言】enum 关键字详解
`enum`关键字在C语言中提供了一种简洁而高效的方法来定义一组相关的常量。通过使用枚举,可以提高代码的可读性、可维护性,并减少错误的发生。在实际应用中,枚举广泛用于表示状态、命令、错误码等,为开发者提供了更清晰的代码结构和更方便的调试手段。通过合理使用枚举,可以编写出更高质量、更易维护的C语言程序。
141 2
|
2月前
|
缓存 安全 编译器
【C语言】volatile 关键字详解
`volatile` 关键字在 C 语言中用于防止编译器对某些变量进行优化,确保每次访问该变量时都直接从内存中读取最新的值。它主要用于处理硬件寄存器和多线程中的共享变量。然而,`volatile` 不保证操作的原子性和顺序,因此在多线程环境中,仍然需要适当的同步机制来确保线程安全。
80 2
|
2月前
|
存储 编译器 程序员
【C语言】auto 关键字详解
`auto` 关键字用于声明局部变量的自动存储类,其作用主要体现在变量的生命周期上。尽管现代C语言中 `auto` 的使用较少,理解其历史背景和作用对于掌握C语言的存储类及变量管理仍然很重要。局部变量默认即为 `auto` 类型,因此在实际编程中,通常不需要显式声明 `auto`。了解 `auto` 关键字有助于更好地理解C语言的存储类及其在不同场景中的应用。
79 1
|
2月前
|
C语言
【C语言】continue 关键字详解
`continue` 关键字在 C 语言中用于跳过当前循环中的剩余代码,并立即开始下一次迭代。它主要用于控制循环中的流程,使程序在满足特定条件时跳过某些代码。
146 1
【C语言】continue 关键字详解
|
2月前
|
Unix 编译器 C语言
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
30 5
|
2月前
|
C语言
【C语言】return 关键字详解 -《回家的诱惑 ! 》
`return` 关键字在 C 语言中用于终止函数的执行,并将控制权返回给调用者。根据函数的类型,`return` 还可以返回一个值。它是函数控制流中的重要组成部分。
104 2
|
2月前
|
存储 人工智能 程序员
【C语言】一篇通关所有 “关键字”,值得收藏篇!
关键字是编程语言预定义的保留词,代表特定的操作或结构。C语言中的关键字用于定义变量类型、控制语句、存储类、数据类型等。使用这些关键字可以创建函数、控制程序的流程、声明变量和常量等。
212 0
|
C语言 Java C++
C语言为何不会过时?你需要掌握多少种语言?
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 【云栖号在线课堂】每天都有产品技术专家分享!课程地址:https://yqh.aliyun.com/live 立即加入社群,与专家面对面,及时了解课程最新动态!【云栖号在线课堂 社群】https://c.
C语言为何不会过时?你需要掌握多少种语言?
|
23天前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
55 23

热门文章

最新文章