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.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* 能够接受任意指针类型。
这是我们在指针学习的时候通常能用到的。
结论:但是我们依旧认为,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 * 用来设计通用接口
今天的内容就到这里了哈!!!
要是认为作者有一点帮助你的话!
就来一个点赞加关注吧!!!当然订阅是更是求之不得!
最后的最后谢谢大家的观看!!!
你们的支持是作者写作的最大动力!!!
下期见哈!!!