目录
一、自我介绍
Hello!大家好!我是【又菜又爱学的小鱼】,欢迎来到我的C语言打怪升级之旅!我想通过这个博客与你们分享我的学习经验,我的目标是建立一个互动社区,大家一起讨论学术问题、分享学习心得,以及探讨知识的无限可能性!
二、笔记01
1.C语言是什么?
C语言其实就是一种计算机语言。人和人交流使用的是自然语言(如:汉语、英语等),而人和计算机是需要通过计算机语言进行交流的。目前已知的有上千种计算机语言,像C++、Java、Python、Go等都是计算机语言。
2.编译和链接是什么?
C语言是一门编译型的计算机语言,它的源代码是文本文件 ,本身无法执行,必须通过编译器翻译和链接器的链接,从而生成二进制的可执行文件(计算机只能识别二进制的指令)。每个C语言源文件(.c)单独经过编译器处理生成对应的目标文件(后缀为.obj的文件),多个目标文件和库文件再经过链接器处理得到对应的可执行程序(后缀为.exe的文件)。
3.各种编译器的对比,VS的优势是什么?
常见的编译器有:msvc、clang、gcc;也有一些集成开发环境,比如:VS2022、XCode、DevC++、Clion等。
集成开发环境简称IDE,一般都是将代码编写、分析、编译、调试等功能集成为一体化的开发软件服务套。
- VS2022是一个主流的集成开发环境(IDE),企业中使用的较为普遍。虽然安装包大一些,但是安装简单,不需要多余的配置,使用起来非常方便,对初学者友好!
- VSCode需要自己搭建C/C++的开发环境,上手成本较高,不推荐初学者使用。
- XCode是苹果电脑上的开发工具。
- DevC++比较小巧,但是工具过于简单,不利于养成良好的代码风格,但仍有一些竞赛在使用。
4.main函数究竟是啥?
main函数(主函数)是程序的入口,C语言程序是从main函数的第一行开始执行的,每个C语言程序不管有多少行代码,都是从main函数开始执行的。
#include <stdio.h>
int main()
{
printf("Hello C\n");
return 0;
}
int main()
{
printf("hahaha\n");
return 0;
}
main函数有且只能有一个,即使一个项目中有很多个.c文件,但是也只能有一个main函数!(不然计算机就不知道该从哪个入口开始执行啦)
int main()
{
return 0;
}
上述代码是C语言中main函数的模板,int表示main函数结束的时候会返回一个整型值,与结尾的return 0;相呼应。
5.关键字有哪些?
C语言中有一批保留名字的符号,比如:int、if、return等,这些符号被称为关键字(或保留字)。关键字都有特殊意义,是保留给C语言使用的;自己在创建标识符的时候不能和关键字一样;不可以自己创建关键字。
C 关键词 - cppreference.comhttps://zh.cppreference.com/w/c/keyword
6.关于字符、ASCII码?
C语言中字符是用单引号括起来的,在键盘上可以敲出各种字符,比如:'a','b','q','@','#'等。我们给每一个字符编一个二进制序列,这个就叫做编码。为了避免混乱,美国国家标准学会(ANSI)出台了一个标准ASCII编码,C语言中的字符就遵循了ASCII编码的方式。
ASCII 码表 - cppreference.comhttps://zh.cppreference.com/w/cpp/language/ascii
- 字符 A~Z 的ASCII码值是 65~90
- 字符 a~z 的ASCII码值是 97~122
- 小写字符(a)的ASCII码值 - 32 为对应大写字符(A)的ASCII码值
- 数字字符 0~9 的ASCII码值是 48~57(连续递增的)
- 注意ASCII码值从0~31这32个字符是不可打印字符,无法在屏幕上显示
7.C语言的字符串?字符和字符串有什么区别?
使用双引号(" ")括起来的一串字符就叫做字符串,字符串的打印格式可以用“%s”来指定,也可以直接用" "表示。
使用单引号(' ')括起来的是字符,字符的打印格式可以用“%c”来指定。
#include <stdio.h>
int main()
{
printf("%s\n","abcdef");//打印结果:abcdef
printf("abcdef");//打印结果:abcdef
printf("%c\n",'w');//打印结果:w
printf("%c\n",'a');//打印结果:a
return 0;
}
8.strlen是什么?
#include <stdio.h>
int main()
{
printf("hello world");
return 0;
}
在VS2022中,先按Ctrl+F10或者Fn+F10对上述代码进行单步调试
打开监视1的窗口,如下所示。我们就可以看到字符串"hello world"所包含的字符以及字符串的长度。
对于该字符串,在末尾还隐藏一个'\0'的转义字符,'\0'是字符串的结束标志。
字符串也可以存放在数组中,参照下面的代码(同样可以按照上面的方法查看字符串包含的字符以及字符长度)
#include <stdio.h>
int main()
{
char arr1[] = "hello";//arr1的结尾有\0
char arr2[] = {'h','e','l','l','o'};//arr2中没有\0
printf("%s\n",arr1);
printf("%s\n", arr2);
return 0;
}
运行结果如下,由于'\0'是字符串的结束标志,但arr2数组中不包含'\0',所以它会继续往后执行,直到遇见'\0'才会停下。
strlen是一个函数,用于输出字符串结尾标志\0之前的字符长度(或者说是字符个数),使用该函数的头文件为string.h,strlen 返回的值是size_t类型的,所以输出时格式应该使用%zd
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "hello";
char arr2[] = { 'h','e','l','l','o'};
printf("%zd\n",strlen(arr1));//5
printf("%zd\n",strlen(arr2));//?
return 0;
}
上述代码中,数组arr1的字符长度为5;而数组arr2的字符长度是随机的,因为它没有'\0',但是到后面总会遇到'\0'的,所以会在一个随机的地方停下。