前言:本篇内容主要涵盖了C语言中的一些基本概念和关键字,可以分为以下几个主题:
-
强制类型转换:
- 主要涉及将浮点数转换为整型的情况。
-
赋值运算符和相等的区别:
- 介绍了赋值运算符
=和相等比较运算符==的区别。
- 介绍了赋值运算符
-
逻辑与与逻辑或:
- 讨论了逻辑与运算符
&&和逻辑或运算符||的用法。
- 讨论了逻辑与运算符
-
三目操作符:
- 介绍了三目操作符,类似于Python中的三目运算符。
-
常见关键字:
- 包括
auto、break、case、switch,以及对switch语句的详细解释。
- 包括
-
Switch语句的例子:
- 提供了一个使用
switch语句的简单例子。
- 提供了一个使用
-
自己尝试的Switch语句例子:
- 展示了自己编写的一个使用
switch语句的例子。
- 展示了自己编写的一个使用
-
关键字
typedef:- 解释了
typedef关键字的用法,给类型取别名。
- 解释了
-
关键字
static:- 讨论了
static关键字在不同情况下的应用,包括修饰局部变量、全局变量、函数。
- 讨论了
-
使用
static修饰全局变量:- 说明了使用
static修饰全局变量的作用。
- 说明了使用
-
使用
static修饰函数:- 讨论了使用
static修饰函数的情况。
- 讨论了使用
-
register寄存器关键字:- 提到了
register关键字,建议将某些变量放入寄存器中以提高访问速度。
- 提到了
强制类型转换:
```c
int main(){
int a = (int)3.14; // 将3.14强制转换为整型
printf("%d",a);
return 0;
}
结果:
3
赋值运算符和相等的区别:
int main(){
int a = 10;
if (a = 3) {
printf("这是赋值\n");
}
if (a == 3) {
printf("这是相等\n");
}
return 0;
}
逻辑与与逻辑或:
int main(){
int a = 0, b = 1; // 0为假,非0为真
if(a && b) {
printf("条件不成立,必须都为真!\n");
}
if(a || b) {
printf("条件成立,有真就行!");
}
return 0;
}
结果:
条件成立,有真就行!
三目操作符:
int main(){
int a = 10, b = 20;
int r = a > b ? a : b; // 如果a大于b:是,则为a,否,则为b
printf("%d\n", r); // a>b为否,应该输出b
return 0;
}
结果:
20
常见关键字:
int main(){
auto int a = 10, b = 20; // 自动创建变量ab(auto默认省略)
return 0;
}
Break语句和Switch语句:
// 参考链接:https://baijiahao.baidu.com/s?id=1760498396078786457&wfr=spider&for=pc
// switch语句基本结构:
// switch (expression) {
// case constant1:
// // 代码块1
// break;
// case constant2:
// // 代码块2
// break;
// // 更多的case语句
// default:
// // 如果expression的值不匹配任何一个case时执行的代码
// }
int main() {
int choice; // 创建一个接收用户输入的变量choice(选则)
printf("Enter a number (1-3): ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("You chose One.\n");
break;
case 2:
printf("You chose Two.\n");
break;
case 3:
printf("You chose Three.\n");
break;
default:
printf("Invalid choice.\n"); // 输入的内容非1-3
}
return 0;
}
自己尝试的Switch语句例子:
int main(){
int choice; // 创建一个变量接受用户输入,申请内存存放输入
printf("请输入你的年龄:(1-100)");
scanf("%d",&choice);
switch (choice) {
case 1:
printf("太棒啦,1岁就会玩电脑啦!");
break;
case 100:
printf("太棒啦,100岁了还能玩电脑!");
break;
case 23:
printf("真垃圾,23岁了编程技术还这么菜!");
break;
default:
printf("不行啊,多大了还不会编程!");
}
return 0;
}
关键字typedef:
typedef unsigned int uint; // 使用typedef给unsigned int取个别名叫uint吧!
int main(){
unsigned int num = 0; // 不使用typedef,unsigned int这个类型太长啦
uint num2 = 1; // 这样就可以直接使用uint来定义 unsigned int类型啦!
return 0;
}
在数据结构中使用typedef定义结构体类型:
// 数据结构中定义一个链表的节点:
struct Node // 创建结构体类型的变量
typedef struct Node // 使用类型定义给struct Node取别名叫Node
{
int data;
struct Node* next;
} Node; // 使用类型定义给struct Node取别名叫Node
int main(){
struct Node n; // 使用结构体类型变量创建n
Node n2; // 取别名为Node后,直接使用别名即可创建结构体变量n2
return 0;
}
关键字static:
int count = 0; // 增加一个计数器来统计函数被调用的次数
void test() {
static int a = 1; // 使用关键字static修饰后,局部变量的作用域变为整个源文件,除了作用域也不会被销毁,此时a的值可以被保留而随着循环调用自增至11
a++;
count++; // 累加器统计test被调用次数
printf("a的值为:%d\n", a);
printf("test函数被调用的第:%d次\n", count);
}
int main(){
int i = 0;
while (i < 10) {
test(); // 调用函数test()
i++;
}
return 0;
}
// 这是给main.c引入的全局变量:
int g_val = 2023; // 全局变量:具有外部链接属性,可被链接至其它文件使用
// ”编译+链接 = 可执行程序“
static int g_val_1 = 2023; // 被static修饰后无法被引用,作用域仅仅限于add.c
// static修饰全局变量后,全局变量的外部链接属性就变味了内部链接属性,
// 其它源文件(.c)就不能再引用它了。
//int Add(int x, int y) // 定义求和函数,在main.c中引用它
//{
// return x + y;
//}
// 使用static修饰后函数无法被被引用:”作用域被限制在定义它的源文件中“
static int Add(int x, int y) // 定义求和函数,在main.c中引用它
{
return x + y;
}
#### 使用static修饰全局变量:
```c
//extern int g_val_2; // 报错:变量未定义
extern int g_val;
int main(){
printf("%d\n", g_val);
return 0;
}
图1-变量的存储位置
使用static修饰函数:
int Add(int x, int y) {
return x + y;
}
extern int Add(int x, int y);
int main(){
int a = 1, b = 2;
int c = Add(a,b);
printf("%d\n", c);
return 0;
}
register寄存器关键字:
int main(){
register int num = 3; // 建议把3放入寄存器中存储
// 只是建议,放到哪里最终由编译器决定。
return
0;
}