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

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

3.putchar

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

头文件:

 函数原型:

用法:

总结:

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.do**、while、**for 关键字

//while

条件初始化

while
(
条件判定
){

//
业务更新

条件更新

}

//for

for
(
条件初始化
;
条件判定
;
条件更新
){

//
业务代码

}

//do while

条件初始化

do
{

条件更新

}
while
(
条件判定
);

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

break && continue 区别

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

5.goto 关键字

直接跳转到标记部分,

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

我的建议

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

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

有人用吗

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.2void用来作为函数返回值

如果自定义函数,或者库函数不需要返回值,那么就可以写成
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*
能够接受任意指针类型。

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

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

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

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

根本原因是因为使用的
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 * 用来设计通用接口

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

/img-blog.csdnimg.cn/56a25a5af7d94d409761c526fa58f436.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y6f5p2lNDU=,size_20,color_FFFFFF,t_70,g_se,x_16)

[外链图片转存中…(img-fZaPh1GE-1715846138576)]
[外链图片转存中…(img-hs37s78H-1715846138576)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值