1.C语言的发展史,学习C语言的重要性?
2.编译和链接是什么?过程是什么?
C语言是一门编译型计算机语言,C语言源代码都是文本文件,文本文件本身无法执行,必须通过编译器翻译和链接器的链接,生成二进制的可执行文件,可执行文件才能执行。
C语言代码是放在.c为后缀的文件中的,要得到最终运行的可执行程序,中间要经过编译和链接2个过程。
代码—编译 —链接 —二进制信息
3.各个编译器我该使用什么?VS的优势?
Vscode-编辑器—装插件—C/C++
VS优点:
主流的集成开发环境,企业中较为普遍
包含编辑器—编译器—调试器,功能强大
直接安装即可使用,上手容易
默认界面是中文,初学者友好
4.main函数究竟是啥?
程序的执行是从main函数的第一行开始执行的,main函数是程序的入口,main有且只有一个,即使一个项目中有多个.c文件,但只能有一个main函数。
5.关键字有哪些?要背诵吗?
常用32个关键字
不需要背诵,慢慢一个一个学。
6.字符?asc码?字符计算?
键盘上可以敲出各种字符,如:q,a,@,#等
给这些字符中的每个字符编一个二进制序列,叫做编码,美国国家标准学会出台了一个标准ASCII编码
7.C语言的字符串?字符和字符串有何区别?
8.sizeof和strlen?竟然有坑?
sizeof 一般形式为:sizeof(object),也可以sizeof var_char,不过大部分programer习惯用sizeof()。 对象可以是表达式或者数据类型名,当对象是表达式时,括号可省略。sizeof是单目运算符,其运算符的含义是:求出对象在计算机内存中所占用的字节数。
strlen
头文件:#include <string.h>
strlen()函数用来计算字符串的长度,其原型为:unsigned int strlen (char *s); s为指定的字符串
区别:
- Strlen是函数
- 字符串用 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(**不包含 ‘\0’ **)。
- 参数指向的字符串必须要以 ‘\0’ 结束,负责会一直往后寻找,直到碰见’\0’才会停下,此种后果会返回一个随机值。
- 注意函数的返回值为size_t,是无符号的( 易错 )。
- strlen只能用char*做参数,且必须是以’’\0’'结尾的。
- 数组传递给strlen就退化为指针了。
因为strlen返回值为无符号类型,优先级高于有符号类型,和有符号类型进行运算时会进行类型转换,所以strlen只能比较,不能参与运算,否则会造成不可预知的后果。
错误示例一:
if (strlen(x) - strlen(y) >= 0) //最终结果会转换为无符号类型,条件永为真。
{
}
错误示例二:
if (strlen(x) - 7) >= 0) //最终结果会转换为无符号类型,条件永为真。
{
}
正确示例一:
if(strlen(x)>= strlen(y))
{
}
sizeof (类型明符) 类型必须加括号,如果是变量名可以不加括号
sizeof 表达式
- sizeof 是关键字/单目运算符,是计算变量或者类型所占内存大小的关键字(返回以字节为单位的大小),而不是一个函数。与函数 strlen 不同,它的参数可以是数组、指针、类型、对象、函数等。
- 返回字符数组大小的时候,包括’\0’。
- 编译时有效,由于sizeof是在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。
- 数组做sizeof的参数不退化。
多说无益,做几道小题练练手,加深理解:
char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0));
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr+1));
printf("%d\n", strlen(&arr[0]+1));
char arr[] = "abcdef";
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0));
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr+1));
printf("%d\n", strlen(&arr[0]+1));
char *p = "abcdef";
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(p+1));
printf("%d\n", sizeof(*p));
printf("%d\n", sizeof(p[0]));
printf("%d\n", sizeof(&p));
printf("%d\n", sizeof(&p+1));
printf("%d\n", sizeof(&p[0]+1));
printf("%d\n", strlen(p));
printf("%d\n", strlen(p+1));
printf("%d\n", strlen(*p));
printf("%d\n", strlen(p[0]));
printf("%d\n", strlen(&p));
printf("%d\n", strlen(&p+1));
printf("%d\n", strlen(&p[0]+1));
strlen的作用是计算一个字符串的长度\也就是多少个字节
9.转义字符是什么?平时怎么用?