1. 两种特殊的转义字符:\ddd 和 \xdd是什么?
• \ddd :ddd表⽰1~3个⼋进制的数字。如: \130表⽰字符X
• \xdd :dd表⽰2个⼗六进制数字。如:\x30表⽰字符0
2. 指出里面哪些是转义字符,并给出运行结果
printf("%zd\n", strlen("c:\\test\128\abcd.c"));
转义字符有: \\ , \12 , \a
\xxx表示八进制 \128里的因为8超过八进制0—7表示范围 所以只对\12转义
运行结果是:15
3. C语言是结构化语言,他有哪几种结构?控制语句是什么?
总体分位三种结构:
- 顺序结构:
- 程序按照代码的书写顺序从上到下执行。
- 选择结构:
- 根据条件的不同,选择执行不同的代码块。
- 主要通过
if
、else if
、else
、switch
等语句实现。
- 循环结构:
- 重复执行某段代码,直到满足特定的条件。
- 包括
for
、while
、do-while
等循环结构。
控制语句
- 条件(选择)语句:
if
语句:如果满足某个条件,则执行相应的代码块。if-else
语句:如果满足某个条件,则执行一个代码块;否则,执行另一个代码块。else if
语句:用于在if-else
结构中添加更多的条件判断。switch
语句:根据表达式的值选择执行多个代码块中的一个。
- 循环语句:
for
循环:用于在给定次数内重复执行代码块。while
循环:当满足某个条件时,重复执行代码块。do-while
循环:先执行一次代码块,然后检查条件;如果条件为真,则继续循环。
- 跳转语句:
break
语句:用于立即退出最内层的循环或switch
语句。continue
语句:用于跳过当前循环的剩余部分,直接进入下一次循环。goto
语句(不推荐使用):无条件跳转到程序中的指定位置。由于它可能导致代码难以理解和维护,因此在现代编程中很少使用。
- 其他语句:
return
语句:用于从函数中返回一个值,并结束函数的执行。exit()
函数(在stdlib.h
中定义):用于立即终止整个程序的执行。
这些结构和控制语句共同构成了C语言程序的基本框架,使得程序员能够编写出结构清晰、易于理解和维护的代码。
4. 为什么要写注释? 编译器是如何看待注释掉的代码的呢?VS2022如何批量注释代码呢?
注释可以帮助其他开发者(包括未来的你自己)理解代码的意图。 清晰的注释能够解释代码的目的、算法、数据结构等,使代码更易于阅读和理解。
编译器在处理代码时,对注释的态度是完全忽略的。
1. /* */ 的形式第⼀种⽅法是将注释放在 /*...*/ 之间,内部可以分⾏。
2. // 的形式 第⼆种写法是将注释放在双斜杠 // 后⾯,从双斜杠到⾏尾都属于注释。这种注释只能是单⾏,可以 放在⾏⾸,也可以放在⼀⾏语句的结尾。这是C99标准新增的语法。
注:详细写法可以看c语言常见概念(2)
5. C语言也有布尔类型?如何使用?
C语言本身并没有内建的布尔(Boolean)类型,但在C99标准中引入了一个头文件 <stdbool.h>
,该头文件中定义了宏 bool
,true
和 false
,它们分别对应于整数类型 _Bool
,以及整数值 1
和 0
。
要使用布尔类型,你需要包含 <stdbool.h>
头文件,并可以使用 bool
类型来声明布尔变量,用 true
和 false
作为布尔值。
6. sizeof不是函数? sizeof还有返回值?? sizeof是在编译器工作的哪个时期运算的?
sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字 节。 sizeof 操作符的操作数可以是类型,也可是变量或者表达式。
sizeof
的返回值是一个 size_t
类型的值,这是一个无符号整数类型,用于表示对象的大小。在大多数现代系统上,size_t
通常是 unsigned long
或 unsigned long long
的别名。
sizeof是在编译时期运算的 不是在运行时期 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。
7 .下面这段代码为什么不输出3 ?为什么?
int a = 2;
sizeof(++a);
printf("%d", a);
sizeof
是在编译时期(compile time)进行运算的,而不是在运行时期(runtime)。这意味着编译器在编译程序时就能确定 sizeof
表达式的值,并将其嵌入到生成的代码中。这是因为 sizeof
的操作数必须是一个完整的类型或对象,这些在编译时期都是已知的。因此,sizeof
的结果是一个常量表达式,其值在编译时期就被确定了。
8. 了解一下头文件 limits.h 和 float.h
C 标准库 – <limits.h> | 菜鸟教程 (runoob.com)limits.h:https://www.runoob.com/cprogramming/c-standard-library-limits-h.html
float.h:https://www.runoob.com/cprogramming/c-standard-library-float-h.html
9. C语言的数据类型有哪四种? char类型是有符号还是无符号?
不同的数据类型都有不同取值范围
-
整型(Integer Types):
char
:字符型,通常用于存储字符,但它实际上是一个整数类型。其大小依赖于系统和编译器(通常为1个字节),可以是有符号的或无符号的。short
:短整型,通常用于存储较小的整数。int
:整型,用于存储整数。long
:长整型,用于存储更大的整数。long long
(或__int64
在某些编译器中):更长的整型,用于存储非常大的整数。
每种整型都可以是有符号的(能表示正数和负数)或无符号的(只能表示非负整数)。默认情况下,
char
、short
、int
和long
都是有符号的,但可以通过在类型前添加unsigned
关键字来声明为无符号的。 -
浮点型(Floating-Point Types):
float
:单精度浮点型。double
:双精度浮点型。long double
:长双精度浮点型(可能比double
精度更高,但这不是必需的)。
-
空类型(Void Type):
void
:表示没有值或没有类型的类型。它通常用于函数返回类型、指针类型和泛型编程中。
-
其他类型:
_Bool
或bool
(在包含<stdbool.h>
后):布尔类型,可以取true
或false
。- 枚举类型(Enumerations):用户定义的类型,可以包含一组命名的整数值。
- 指针类型(Pointers):用于存储内存地址的类型。
关于 char
类型的符号性,这取决于编译器和具体的实现。默认情况下,char
可以是有符号的也可以是无符号的,这取决于编译器和平台。为了明确指定 char
的符号性,你可以使用 signed char
或 unsigned char
。在某些平台上,char
默认是有符号的,而在其他平台上则默认是无符号的。因此,在编写可移植代码时,最好明确指定 char
的符号性。
10. 变量创建的局部有限性原则究竟是什么?
变量创建的局部有限性原则是指局部变量只在其所在的函数内部(作用域内)可见和使用,并且在函数执行结束后,这些局部变量的内存会被自动释放,不再存在(生命周期结束)。同时,局部变量在使用前必须被初始化。
• 全局变量:在⼤括号外部定义的变量就是全局变量 全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。
• 局部变量:在⼤括号内部定义的变量就是局部变量 局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。
11. 局部变量和全局变量分别存在内存中的哪个位置?堆内如何存储变量?
1. 局部变量是放在内存的栈区
2. 全局变量是放在内存的静态区
3. 堆区是⽤来动态内存管理的
···堆内存用于动态存储变量,通过malloc
、calloc
等函数分配内存,并返回指向该内存的指针。程序员需手动管理堆内存,包括分配和释放。如果忘记释放内存,可能导致内存泄漏。使用这些函数时,应检查返回值以确保内存分配成功。