diff --git "a/C\350\257\255\350\250\200 if else while \357\274\214dowhile\357\274\214switch\357\274\214for\350\257\255\345\217\245\357\274\232.md" "b/C\350\257\255\350\250\200 if else while \357\274\214dowhile\357\274\214switch\357\274\214for\350\257\255\345\217\245\357\274\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..2695090a3f5e88eb39cda0d7004e2f79e2a4cccc --- /dev/null +++ "b/C\350\257\255\350\250\200 if else while \357\274\214dowhile\357\274\214switch\357\274\214for\350\257\255\345\217\245\357\274\232.md" @@ -0,0 +1,191 @@ +C语言 if else, while ,dowhile,switch,for,getchar语句: + +C语言是结构化的程序设计语言 + +只有三大结构:顺序结构 选择结构 循环结构 + +if else 语句: + +不加花括号包含执行语句的话,那么默认执行if或else或elseif的第一行 + +1.单分支 + +if(表达式) + +执行语句 + +2.双分支 + +if(表达式) + +执行语句 + +else + +执行语句 + +3.多分支 + +if(表达式) + +执行语句 + + else if(表达式)(可以分出其他情况,比else条件具体,并不是符合if的情况下才执行此语句,不要理解错误。) + +​ 执行语句 + +else(可以不带else) + +执行语句 + +switch语句: + +switch(整形表达式) + +{ + + + +case 整形表达式: + +执行语句; + +break(用来中止某个case语句); + + + +case 整形表达式: + +执行语句; + +break(用来中止某个case语句); + + + +default(剩余情况下执行的语句): + +执行语句; + +} + + + + + +while语句: + + + +while(表达式) + +执行语句(只要表达式为真,那么执行语句反复进行,可以用break;进行结束循环)。 + +continue的作用:跳过本次循环中continue下面的执行语句,回到循环的判断语句,再往下执行。 + +例如一个死循环: + +#include + +int main(){ + +int i=1; + +while(i<=2) + +{ + +if(i==2) + +continue; + +i++; + +printf("%d",i);//最终结果是12,而且下划线一直在闪烁,证明程序没有结束,卡在了if语句中,continue不断使程序从while(i<=2)开始,此时i=2毋庸置疑。 + +} + +} + + + + + +getchar语句: + +下面的程序实现的是每输入一个字符,打印一个字符。 + +#include + +int main() + +{ + +int ch=0; + +while((ch=getchar()!=EOF)//getchar是从键盘输入中获取一个字符,返回值为字符的ASCII值(整数),如果读取错误或者读取结束返回值是EOF(end of file其实是-1),crtl+z相当于EOF,所以可以中止此程序。 + +putchar(ch);//ch根据ASCII表转化为字符,输出一个字符,只是一个字符哦。 + +return 0; + +} + +在getchar与之间键盘有一个缓冲区,每输入一个字符,字符进入缓冲区后,字符自动后面加上\n(换行符),putchar输出那么又再次输出了换行符。所以你看到的是两行。(在这里做个小补充,一个scanf虽然可以读取空格之前和之后的数据,读取后进入缓存区,后面要加上换行符,但是找到地址放有效值的时候,只能放入空格之前的数据。) + + + +for语句: + +for(表达式1(初始化);表达式2(判断);表达式3(调整部分)) + +{ + +执行表达式;//一次循环可以用break结束,continue也可以用。 + +} + +表达式123都可以省略,但是要慎重,好好理解,一个;就是一行语句。 + + + +dowhile语句: + + + +do//先执行一次再判断一次,break和continue一样可用。 + +​ 循环语句; + +while(表达式); + + + +例如求阶乘, + +#define _CRT_SECURE_NO_WARNINGS 1 + +#include +int main() +{ + int n; + int i=1; + int sum = 1; + scanf("%d", &n); + if (n == 0) return 0; + do + { + sum *= i; + i++; + } while (n >= i); + printf("%d", sum); + +} + + + + + + + + + diff --git "a/C\350\257\255\350\250\200\345\207\275\346\225\260&&\346\225\260\347\273\204.md" "b/C\350\257\255\350\250\200\345\207\275\346\225\260&&\346\225\260\347\273\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..54a8f16ca3290f7fb07eff3c52f45f1b29610d5a --- /dev/null +++ "b/C\350\257\255\350\250\200\345\207\275\346\225\260&&\346\225\260\347\273\204.md" @@ -0,0 +1,69 @@ +C语言函数&&数组 + +函数: + +​ x,y属于ADD函数的内部变量也就是他的局部变量,在调用它的时候x,y会被定义并分别赋值,执行完ADD函数后,x,y就会被销毁(这句话很重要,听懂就行)。 + +​ 函数作用之一就是为了让代码不冗余,重复用的算法可以调用函数。 + +![image-20220802192402571](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220802192402571.png) + +关于函数的定义:参考维基百科(中文版现在由台湾维护),他的其他名字叫做子程序,是一个大程序中的某部分代码,由一个或多个语句块组成,他负责某些特定任务,而且相较于其他代码,具备相对的独立性。 + +函数的分类:库函数和自定义函数 + +库函数: + +例如引入头文件后的拥有的函数,就是库函数。 + +![image-20220807162136393](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220807162136393.png) + +不懂可以查阅C语言网站:[cppreference.com](https://zh.cppreference.com/w/首页)。比较实用的中文网站。 + +自定义函数:就是程序员自己写的函数。不做太多解释。 + +关于参数: + +![image-20220810164914319](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220810164914319.png) + +函数的嵌套调用: + +可以在某个函数中随意调用其它函数,但是不能定义函数,就是不能嵌套定义。 + +函数的链式访问: + +就是把一个函数的返回值作为另一函数的参数。 + +小知识点: + +printf返回值为打印在屏幕上的字符个数。 + +函数的声明与定义: + +函数最好提前声明(定义放在后面的话),编译从头开始,自定义函数肯定要放在main函数前面。 + +关于静态库,怎样买卖代码: + +程序员A写了头文件和源文件,他想卖出去但是又不想让别人知道他的算法的实现方法,那么他会怎么办呢,他只需要提供买家头文件和静态库就好了。那么怎么生成静态库呢?可以对项目右击属性,然后修改配置类型,编译执行生成.lib文件,在项目文件夹中debug文件夹中生成.lib文件,这就是静态库。(记得写好注释,要不别人看不懂) + +image-20220811162404755 + + + +那么现在程序员B要买他的代码,现在买到了,得到了程序员A的头文件和静态库,怎么在他的代码使用呢,头文件和静态库全部放入程序员B的项目中, + +然后在源代码文件中写入代码导入静态库,再把头文件引入进去就好了: + +![image-20220811163018429](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220811163018429.png) + +数组: + +创建:10和5可以不要,但这样的话ch[5],计算(计算字符串长度的函数)strlen(ch)的时候找不到\0,那么就不会停止,可以说是随机停止,打印出来的值是大于3的随机值(因为abc就是三个字符了)。 + +![image-20220802200837547](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220802200837547.png) + +输出: + +![image-20220802201305612](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220802201305612.png) + +输出12345678910。 \ No newline at end of file diff --git "a/C\350\257\255\350\250\200\347\232\204\346\214\207\351\222\210.md" "b/C\350\257\255\350\250\200\347\232\204\346\214\207\351\222\210.md" new file mode 100644 index 0000000000000000000000000000000000000000..e0bf4495b4389f6df7215a0e58b774b08e66eb7b --- /dev/null +++ "b/C\350\257\255\350\250\200\347\232\204\346\214\207\351\222\210.md" @@ -0,0 +1,19 @@ +C语言的指针: + +关于内存: + +![image-20220801213212553](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801213212553.png) + +(以32位电脑为例)图的右半部分中,32根地址线可以产生2^32种数字信号可能,那么这就是01234.。。的编号的意思,也就是说可以存储2^32个内存单元,问题在于一个内存单元我们给他设定多大比较合适(想想看,char占一个字节而int占四个字节【应该很少有比一个字节更小的了,一个字节——八位二进制数我看就挺好】,好像一个字节一个内存单元确实不错,如果是1bit一个内存单元的话那么换算后存储的空间岂不是太小,而字节确实不错,又具体又能发挥空间较大化)。 + +图中,01234.。。代表每个内存单元,规定结论综合得出一个内存单元是一个字节,8个二进制位(8bit)一个字节(一个内存单元)。 + +关于指针: + +![image-20220801220414866](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801220414866.png) + +*解引用操作符: + +![image-20220802182849252](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220802182849252.png) + +关于指针的大小(与32位或者64位操作系统有关):32位为例![image-20220802183231233](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220802183231233.png) \ No newline at end of file diff --git "a/C\350\257\255\350\250\200\347\232\204\346\225\260\346\215\256\347\261\273\345\236\213.md" "b/C\350\257\255\350\250\200\347\232\204\346\225\260\346\215\256\347\261\273\345\236\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..1f93c55c96253af83a5cd125224415778e023c9f --- /dev/null +++ "b/C\350\257\255\350\250\200\347\232\204\346\225\260\346\215\256\347\261\273\345\236\213.md" @@ -0,0 +1,9 @@ +C语言的数据类型 + +![image-20220723102406670](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220723102406670.png) + +sizeof(char)可以返回char的字节数,sizeof是操作符不是函数,上图中字节数分别为1、2、4、4、8、4、8 + +进制与单位 + +![image-20220723103454016](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220723103454016.png) \ No newline at end of file diff --git "a/C\350\257\255\350\250\200\351\200\211\346\213\251\350\257\255\345\217\245\344\270\216\345\276\252\347\216\257\350\257\255\345\217\245.md" "b/C\350\257\255\350\250\200\351\200\211\346\213\251\350\257\255\345\217\245\344\270\216\345\276\252\347\216\257\350\257\255\345\217\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..14a522629ad1de190b29c2ee1a4f9e33e71f43eb --- /dev/null +++ "b/C\350\257\255\350\250\200\351\200\211\346\213\251\350\257\255\345\217\245\344\270\216\345\276\252\347\216\257\350\257\255\345\217\245.md" @@ -0,0 +1,9 @@ +C语言选择语句和循环语句: + +选择: + +![image-20220802191855865](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220802191855865.png) + +循环: + +![image-20220802192104515](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220802192104515.png) \ No newline at end of file diff --git "a/VS2022\345\256\211\350\243\205\346\225\231\347\250\213.md" "b/VS2022\345\256\211\350\243\205\346\225\231\347\250\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..3b97b0a660a18741d5d15051fbc53403bb764136 --- /dev/null +++ "b/VS2022\345\256\211\350\243\205\346\225\231\347\250\213.md" @@ -0,0 +1,3 @@ +VS2022安装教程: + +![image-20220803231008569](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220803231008569.png) \ No newline at end of file diff --git "a/\344\270\200\347\273\264\346\225\260\347\273\204\357\274\214\344\272\214\347\273\264\346\225\260\347\273\204\357\274\232.md" "b/\344\270\200\347\273\264\346\225\260\347\273\204\357\274\214\344\272\214\347\273\264\346\225\260\347\273\204\357\274\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..03c1b78bab31b4e5c0722a110185ba0498dba2fa --- /dev/null +++ "b/\344\270\200\347\273\264\346\225\260\347\273\204\357\274\214\344\272\214\347\273\264\346\225\260\347\273\204\357\274\232.md" @@ -0,0 +1,33 @@ +一维数组: + +![image-20220814140614164](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220814140614164.png) + +1.不完全初始化,后面自动填充0; + +2.等价于arr[4]。 + +3.完全初始化。 + +4.98翻译为ASCII字符。 + +5.没有‘\0’写入,找不到结束标志(\0),所以打印的时候编译器不知道何时结束。 + +6.\0自动填充,结果是7个字符。 + +关于数组的存储: + +![image-20220814141337616](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220814141337616.png) + +二维数组: + +![image-20220814141848650](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220814141848650.png) + +二维数组其实与一维数组存储一样,也是连续存储。 + +关于二维数组简略型首地址: + +![image-20220814142407883](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220814142407883.png) + +数组名: + +![image-20220814142952024](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220814142952024.png) \ No newline at end of file diff --git "a/\344\273\200\344\271\210\346\230\257C\350\257\255\350\250\200\357\274\237.md" "b/\344\273\200\344\271\210\346\230\257C\350\257\255\350\250\200\357\274\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..bbe95739fd7dc5ab187c90a9b8f0fae7ea7ec523 --- /dev/null +++ "b/\344\273\200\344\271\210\346\230\257C\350\257\255\350\250\200\357\274\237.md" @@ -0,0 +1,13 @@ +什么是C语言? + +语言:人与人交流的语言。 + +计算机语言:人与计算机交流的语言。 + +C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译,处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 + +![image-20220723093006627](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220723093006627.png) + +![image-20220723094451692](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220723094451692.png) + +MSVC:例如微软的VS2013. \ No newline at end of file diff --git "a/\345\205\263\344\272\216cmd\350\257\255\345\217\245\357\274\232.md" "b/\345\205\263\344\272\216cmd\350\257\255\345\217\245\357\274\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..9c9e1aeb5d4b9ef4c21f23f5a92ca829b203ce9f --- /dev/null +++ "b/\345\205\263\344\272\216cmd\350\257\255\345\217\245\357\274\232.md" @@ -0,0 +1,45 @@ +关于cmd语句: + +shutdown -s -t 60秒后关机。C语言的话用system(“shutdown -s -t”); + +shutdown -a取消关机 + +cmd命令创建服务(以管理员身份运行): + +sc create myService binpath=D:\精通学习C++\Project3\x64\Debug\Project3.exe + +myService是自定义服务名称,binpath后面是文件绝对路径。 + +sc delete 服务名称 即可删除服务。 + +二、使用两个工具:instsrv + srvany +instsrv.exe和srvany.exe是微软提供的两个实用工具,这两个工具配合使用可以将任何exe应用程序作为windows服务运行。 + +网盘下载链接:https://pan.baidu.com/s/1o9rVaOA2zzg57eu2AfjqBQ 提取码:71gn + +下载完成后将instsrv.exe和srvany.exe拷贝到C:\Windows\SysWOW64目录下(如果是windows32位系统则拷贝到C:\Windows\system32目录下) + +接着以管理员身份打开cmd,进入到C:\Windows\SysWOW64目录(windows32位系统则进入C:\Windows\system32目录),输入命令:instsrv myService C:\Windows\SysWOW64\srvany.exe + +其中myService为创建的服务名称。服务创建成功后还需要进行相应的配置。 + +![img](https://img-blog.csdnimg.cn/ca5b4840e7424958be00b71c345be48c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAZmFlcmZ3ZWR3,size_20,color_FFFFFF,t_70,g_se,x_16) + +![img](https://img-blog.csdnimg.cn/ddd309e19fba48bbb11343659ea9cc4a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAZmFlcmZ3ZWR3,size_20,color_FFFFFF,t_70,g_se,x_16) + +配置 + +1. 打开注册表(在cmd或者windows自带的搜索中输入: regedit) + +2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services目录下找到myService(之前创建的服务名称)。右击myService,点击“新建项”,命名为“Parameters”。然后在Parameters中新建几个字符串值。 + +名称: Application 值: exe程序(之前创建的关机程序)的绝对路径(如下图所示) +名称: AppDirectory 值: exe程序所在的文件夹路径 +名称: AppParameters 无需设置值 + + +最后打开系统服务,找到创建的myService服务,将myService启动类型设置为自动就可以在电脑开机后自动运行关机程序了! + +———————————————— +版权声明:本文为CSDN博主「阿大饭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 +原文链接:https://blog.csdn.net/faerfwedw/article/details/124236107 \ No newline at end of file diff --git "a/\345\205\263\344\272\216rand\344\275\277\347\224\250\357\274\232.md" "b/\345\205\263\344\272\216rand\344\275\277\347\224\250\357\274\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..fea6e157b466083b596520615231eaa708a605f5 --- /dev/null +++ "b/\345\205\263\344\272\216rand\344\275\277\347\224\250\357\274\232.md" @@ -0,0 +1,60 @@ +关于rand使用: + +单纯利用rand函数并不能实现完全随机,他的范围是0到RAND_MAX(32767),每次运行程序,每次的程序结果其实是一样的,调用rand函数之前其实先调用了srand函数,设置起点函数,例如 + +srand((unsigned int)time(NULL));//设置一次就可以了。 + +srand函数参数值类型为unsigned int,所以要强制类型转换,time函数是返回一个时间戳,能返回整形,单位是秒,是与现在的时间间隔,程序执行以后,sand函数根据函数起点开始产生随机值,所以整个程序中srand只需要调用一次就好。 + +写一个猜数字游戏: + +#define _CRT_SECURE_NO_WARNINGS 1 +#include +#include +#include +#include +void menu() { + printf("数字猜谜游戏(1——100)\n开始游戏输入1\n退出游戏输入2\n"); +} +void game() { + int ret = rand()%100+1;//随机生成1到100的整数 + int ans = 0;//你输入的答案 + while (1) { + printf("请输入答案\n"); + scanf("%d", &ans); + if (ans == ret) + { + printf("恭喜你回答正确!!!\n"); + break; + } + else if (ans > ret) + printf("猜大了\n"); + else if (ans < ret) + printf("猜小了\n"); + } +} +int main() +{ + int input;// + srand((unsigned int)time(NULL));//将当前时间作为随机生成器的种子,然后生根发芽 + do { + menu(); + printf("请选择:>"); + scanf("%d", &input); + switch (input) + { + case 1: + game(); + break; + case 2: + printf("退出游戏\n"); + Sleep(1000); + exit(1);//退出程序,但是窗口还在 + break; + default: + printf("选择错误,请重新选择\n"); + break; + } + } while (1); +} + diff --git "a/\345\207\275\346\225\260\351\200\222\345\275\222\357\274\232.md" "b/\345\207\275\346\225\260\351\200\222\345\275\222\357\274\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..e08667021e255547785b20967c1b4d8aedb8c487 --- /dev/null +++ "b/\345\207\275\346\225\260\351\200\222\345\275\222\357\274\232.md" @@ -0,0 +1,7 @@ +函数递归: + +![image-20220811164155117](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220811164155117.png) + +![image-20220811164454203](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220811164454203.png) + +附:有的问题既可以用循环实现,也可以用递归来实现。递归更容易被我们想到,但有时递归代码的效率会不如循环代码。因此,要根据具体情况选择合适的方法。 \ No newline at end of file diff --git "a/\345\210\235\350\257\206\345\255\227\347\254\246\344\270\262\357\274\210\345\255\227\347\254\246\346\225\260\347\273\204\357\274\211.md" "b/\345\210\235\350\257\206\345\255\227\347\254\246\344\270\262\357\274\210\345\255\227\347\254\246\346\225\260\347\273\204\357\274\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..8f3cd6e85d5261e068e3f8459113af1e48fc95fd --- /dev/null +++ "b/\345\210\235\350\257\206\345\255\227\347\254\246\344\270\262\357\274\210\345\255\227\347\254\246\346\225\260\347\273\204\357\274\211.md" @@ -0,0 +1,15 @@ +初识字符串 + +字符串-字符数组-一组相同类型的元素。 + +字符串在结尾的位置隐藏了一个\0的字符,是字符串结束的标志。 + +strlen()C语言的函数,返回字符长度,去掉\0以后的长度。 + +问题一:为什么打印字符数组名称返回的是数组内容而不是地址? + +只有字符数组类型才会出现这种情况 + +**因为字符串中“ \0 ”这个结束符(所以其他类型数组返回的是地址),计算机可以知道在哪里读取结束,所以打印数组名就代表输出里面存储的字符串,其他类型没有结束符,计算机不知道从哪里停止,所以就输出地址。养成好习惯,取址要用取址符。** + +![image-20220724131734299](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220724131734299.png) \ No newline at end of file diff --git "a/\345\210\235\350\257\206\345\270\270\351\207\217\345\217\230\351\207\217.md" "b/\345\210\235\350\257\206\345\270\270\351\207\217\345\217\230\351\207\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..921c186799864642c465f8c9e86d5d8a260d1726 --- /dev/null +++ "b/\345\210\235\350\257\206\345\270\270\351\207\217\345\217\230\351\207\217.md" @@ -0,0 +1,45 @@ +初识常量变量 + +生活中不变的值是常量,变的值是变量(例如圆周率不可变,性别认为不可变)。 + +变量: + +局部变量(大括号内部)和全局变量(大括号外部)。 + +如果VS2013不支持scanf, + +方法一: + +可以在第一行加入这行代码 + +#define _CRT_SECURE_NO_WARNINGS 1 + +方法二: + +![image-20220723112939196](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220723112939196.png) + +找到图中选中文件newc++file.cpp + +加入代码#define _CRT_SECURE_NO_WARNINGS 1即可,修改完保存可能权限不够,这时,你可以这样,以管理员权限打开记事本应用,然后在记事本应用中打开这个文件就好了(找不到文件,因为他不是记事本格式,咋办呢,在下拉框选择所有文件不就行了)。 + +尽量不用scanf_s,因为其他编译器不支持。 + +变量的作用域和声明周期: + +局部变量作用域:所在大括号内部。 + +全局变量作用域:整个工程,使用extern关键字,这样就可以,在相同工程内部不同cpp文件里引入变量了,例如extern int a(其他文件的全局变量)。 + +局部变量生命周期:进入局部范围开始,离开局部范围结束。 + +全局变量生命周期:程序的生命周期。 + +变量: + +1.字面常量。 + +2.const修饰的常变量(非常量,例如定义数组不能用常变量定义他的大小):const修饰无法修改。 + +3.#define定义的标识符常量。 + +4.枚举常量。 \ No newline at end of file diff --git "a/\345\210\235\350\257\206\350\275\254\344\271\211\345\255\227\347\254\246.md" "b/\345\210\235\350\257\206\350\275\254\344\271\211\345\255\227\347\254\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..778b4bd34b1821eb30b36531447bcbf2d276f818 --- /dev/null +++ "b/\345\210\235\350\257\206\350\275\254\344\271\211\345\255\227\347\254\246.md" @@ -0,0 +1,7 @@ +初识转义字符 + +![image-20220730105722517](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220730105722517.png) + +![image-20220730110418785](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220730110418785.png) + +不用详解,很多基本过时。 \ No newline at end of file diff --git "a/\345\270\270\350\247\201\345\205\263\351\224\256\345\255\227.md" "b/\345\270\270\350\247\201\345\205\263\351\224\256\345\255\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..feb71462cd3222353d8d2e69f0de1309f9bd822e --- /dev/null +++ "b/\345\270\270\350\247\201\345\205\263\351\224\256\345\255\227.md" @@ -0,0 +1,39 @@ +常见关键字 + +![image-20220801161230624](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801161230624.png) + +auto每个局部变量都会有,只是省略掉了。新语法还对auto做了一些更新。 + +extern用来引用外部变量。 + +**goto语句的本质是无条件跳转指令。** + +例如: + +image-20220801163136951 + +AB死循环。A、B只是个跳转的标志,不影响编译。 + +register寄存器关键字,例如: + +![image-20220801163434370](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801163434370.png) + +计算机中数据的存储可以存放在内存,硬盘,网盘(依赖外部网络服务器),高速缓存(很小几十MB),寄存器(比高速缓存还小)中。寄存器最快。 + +![image-20220801163716446](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801163716446.png) + +static:(静态的) + +1.修饰局部变量 改变了局部变量生命周期,代替auto,离开函数后没有销毁局部变量。 + +2.修饰全局变量 使得此全局变量只能在本源文件里内部使用,其他源文件不行。由外部链接属性变成内部链接属性。 + +3.修饰函数 与修饰全局变量一样。使得函数只能在自己的源文件使用。 + +![image-20220801171452818](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801171452818.png) + + + +volatile:编译器编译时首先浏览最快的寄存器,假设有寄存器中的一个变量,编译器就会惯性认为寄存器中的这个变量值不会变,而实际上在其他程序中这个变量的值被改变了,那么编译器就会惯性编译寄存器中的值,为了解决此问题,volatile应运而生,让编译器对寄存器、高速缓存和内存遍历后才确定他的值。 + +PS:include define不是关键字他们是预处理语句 \ No newline at end of file diff --git "a/\345\270\270\351\207\217\345\222\214\345\256\217.md" "b/\345\270\270\351\207\217\345\222\214\345\256\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..7c7bef5879281542bad44128bfb0ece5398cd499 --- /dev/null +++ "b/\345\270\270\351\207\217\345\222\214\345\256\217.md" @@ -0,0 +1,7 @@ +#define定义常量和宏 + +定义宏: + +![image-20220801212132780](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801212132780.png) + +相当于替代语句X+Y,但是变量传入进去了。 \ No newline at end of file diff --git "a/\346\223\215\344\275\234\347\254\246.md" "b/\346\223\215\344\275\234\347\254\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..9382839c380a26213e92153c6f5c785d683dc222 --- /dev/null +++ "b/\346\223\215\344\275\234\347\254\246.md" @@ -0,0 +1,25 @@ +操作符 + +算术操作符 + +![image-20220801153635178](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801153635178.png) + +移位操作符移位二级制,相当于左移乘二右移除以二。 + +位运算符都是双目运算符,意思也是二进制数,(因为整数在内存中存储的都是补码,但是要显示的话,显示的是原码)但是都是以补码的形式各位对应相与或者相或。 + +![image-20220801154123309](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801154123309.png) + +![image-20220801154234924](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801154234924.png) + +关系操作符 + +![image-20220801160553027](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801160553027.png) + +![image-20220801160610217](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801160610217.png) + +![image-20220801160630315](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801160630315.png) + +![image-20220801160711825](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220801160711825.png) + +逗号表达式的结果是最后一个表达式的结果。 \ No newline at end of file diff --git "a/\347\254\254\344\270\200\344\270\252C\350\257\255\350\250\200\347\250\213\345\272\217.md" "b/\347\254\254\344\270\200\344\270\252C\350\257\255\350\250\200\347\250\213\345\272\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..2da589aaa7ea319019448d176cedfaf39dd04ebd --- /dev/null +++ "b/\347\254\254\344\270\200\344\270\252C\350\257\255\350\250\200\347\250\213\345\272\217.md" @@ -0,0 +1,47 @@ +第一个C语言程序: + +![image-20220723094705197](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220723094705197.png) + +源文件: + +![image-20220723095219141](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220723095219141.png) + +*main函数是代码编译的入口* + +#include"stdio.h" + +int main() + +{ + +printf("hello,world!"); + +} + +解决代码编译窗口闪退问题: + +对于单个项目右击属性即可看到如下界面(VS2013) + +![image-20220723100505041](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220723100505041.png) + +通过**Crtl+F5**进行编译才行,开始执行不调试。 + + + + + +​ 解决防止此文件因为一些老的.c文件使用了strcpy,scanf等不安全的函数导致报警告和错误,使其无法编译通过: + +同样的效果(这对整个项目生效): + +①在文件顶部加入#define _CRT_SECURE_NO_WARNINGS 1 + +②在项目属性里设置选择:属性->配置属性->C/C++ ->预处理器->预处理器定义->编辑 + +最下面加上一行: + +#define _CRT_SECURE_NO_WARNINGS 1 + +③寻找桌面软件快捷方式–右键打开文件所在位置–推到Microsoft Visual Studio 12.0文件夹–VC文件夹-vcprojectitems文件夹–找到newc++file文件–右键编辑该文件将 +#define _CRT_SECURE_NO_WARNINGS 1复制粘贴进去,保存。 +之后创建的源文件首行就默认有#define _CRT_SECURE_NO_WARNINGS 1 diff --git "a/\347\273\223\346\236\204\344\275\223\357\274\232.md" "b/\347\273\223\346\236\204\344\275\223\357\274\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..c7f7d951d3c41b2a4c1eb154e1a142693587f603 --- /dev/null +++ "b/\347\273\223\346\236\204\344\275\223\357\274\232.md" @@ -0,0 +1,8 @@ +结构体: + +对于结构体的基本操作: + +![image-20220802183841474](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220802183841474.png) + +![image-20220802184345303](C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220802184345303.png) +