2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
adj.
易变的,不稳定的; (液体或油)易挥发的; 爆炸性的; 快活的,轻快的
防止编译器优化代码??
flag=1
flag=0
编译器会默认给它干成falg=0
不能让编译器这么搞的话,加volatile就行
volatile int flag=0;
flag=1
flag=0
//基本用不上
register寄存器
int a=10;//内存里面会放它,但是不在寄存器中
//如果你想整到寄存器里面,提高效率,可能需要用register关键字
如果你想把变量整到寄存器里面,提高效率,可能需要用register关键字
但是cpu很忙,经常用寄存器,你可能申请不到哦
如果指针操作就gg了
因为指针需要知道变量的地址,如果你放寄存器了,那gg
没法玩
register基本没啥用,现在我们用不到,回头再说。
关注字符串
一串字符变量
""双引号引起来的字符,叫字符串
“abc”
python里面可以用单引号,反正简介表达即可
一定有一个结束标记【c语言中\0就会自动加上去结束】
字符串内部存储是这样的
“abc\0”
这是c语言的特殊之处哦
%d整型
%u无符号
%c字符
%o八进制
%x十六进制】
%s字符串:
从字符串的第一个字符,开始打印,直到\0结束
'a’字符
"a"字符串==“a\0”
它俩不是等价的哦!!!!!
void f12(void)
{
char ch = 'a';//字符
char str[] = "a";//字符串,本质就是字符数组
char str2[5] = "abcdef";//字符串,本质就是字符数组
//这种可以已定义长度,也可以不定义长度,它自动分配就行
//
//string str2 = "a";//c++貌似这么定义的
printf("字符:%c\n", ch);
printf("字符串:%s\n", str);
}
如果你非要定义为字符数组,你就需要加\0
否则,它就gg
void f12(void)
{
char ch = 'a';//字符
printf("字符:%c\n", ch);
char str[] = "a";//字符串,本质就是字符数组
//char str2[5] = "abcdef";//字符串,本质就是字符数组
//这种可以已定义长度,也可以不定义长度,它自动分配就行
//
//string str2 = "a";//c++貌似这么定义的
char s2[2] = { 'a','k' };//没有加\0
printf("字符串:%s\n", s2);
}
char s2[3] = { 'a','k','\0'};//没有加\0
printf("字符串:%s\n", s2);
懂了吧,字符串自动是加\0的
打印printf时,它必须遇到\0才会结束,否则就会打印乱码
%m.n
它是干嘛的?
打印实数类型,一共m位,n个小数点【不足的前面补零】
%%输出一个百分号
printf("\%");//反斜杠无法直接转移%
printf("%%");//俩百分号才行
printf("%5s\n", str);//俩百分号才行
不常用的
直接打印字符,不用printf啥的格式匹配符麻烦
putchar(ch);
putchar(ch);
putchar(98);
它不可以放字符串,否则就是乱码哦
'abc’默认只看末尾字符
错误的表示
不管
scanf从键盘接受用户输入
需要有格式匹配的,和那个printf类似
先定义变量,再去接受,存入
懂?
void f13(void)
{
int a;
scanf("%d", &a);//取出变量a的地址,然后把int数字读进去放好,存储
printf("%d\n", a);//打印
}
使用scanf如果报错则解决方案是
错误C4996 ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. 最高效解决办法!!
再看看其他的字符输入啥的
void f13(void)
{
//int a;
//scanf("%d", &a);//取出变量a的地址,然后把int数字读进去放好,存储
//printf("%d\n", a);//打印
char ch;
scanf("%c", &ch);//取出变量a的地址,然后把int数字读进去放好,存储
printf("%c\n", ch);//打印
}
void f13(void)
{
//int a;
//scanf("%d", &a);//取出变量a的地址,然后把int数字读进去放好,存储
//printf("%d\n", a);//打印
char ch,c2,c3;
scanf("%c%c%c", &ch, &c2, &c3);//取出变量a的地址,然后把int数字读进去放好,存储
printf("%c%c%c\n", ch, c2,c3);//打印
}
int a,b,c;
scanf("%d%d%d", &a, &b, &c);//取出变量a的地址,然后把int数字读进去放好,存储
printf("%d\n", a);//打印
printf("%d\n", b);//打印
printf("%d\n", c);//打印
那要是字符串呢?
定义字符数组,即字符串,c++中直接string
c语言中是字符数组char s[N],N长度。
char s[5];
scanf("%s", &s);
printf("%s\n", s);
char s[5];
scanf("%s", s);
printf("%s\n", s);
注意
你定义了多长的数组空间,但是你可以多输入,不过呢,后面那些超过内存的空间是会出错的
即使你多输入了
printf可能会正常输出
因为它呀遇到\0才会停止打印
反正scanf有安全隐患的,存储空间不足,虽然可以存储,但是不被保护
多出去的,肯定会被别人覆盖
char s[5];
scanf("%s", s);
int s2[200] = {1,2,3,4,5,6,7,8,9,10};
printf("%s\n", s);//可能多了字符,它也能接受,但是你定义内部的空间,超过了,它不会管的
//数组是连续存储的
//c语言都会默认挨着存储的
scanf即使空间足够,好像也还有问题?
你只要搞空格,基本就分开了,你想要后续的输入就gg
碰到空格或者\n换行符号
它就会自动终止。
目前来看,scanf没法接受带空格的字符串。。。
//getchar获取一个字符
char c = getchar();
printf("%c\n", c);
五参数,返回一个字符
放一个字符,可以用printf或者putchar
easy
putchar(‘\n’);回车,好说
putchar('\n');回车,好说
c语言的字符数组就是字符串
懂?
提示:重要经验:
1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。