C语言学习笔记-入门篇03:基本概念和关键字

93 阅读5分钟

前言:本篇内容主要涵盖了C语言中的一些基本概念和关键字,可以分为以下几个主题:

  1. 强制类型转换:

    • 主要涉及将浮点数转换为整型的情况。
  2. 赋值运算符和相等的区别:

    • 介绍了赋值运算符=和相等比较运算符==的区别。
  3. 逻辑与与逻辑或:

    • 讨论了逻辑与运算符&&和逻辑或运算符||的用法。
  4. 三目操作符:

    • 介绍了三目操作符,类似于Python中的三目运算符。
  5. 常见关键字:

    • 包括autobreakcaseswitch,以及对switch语句的详细解释。
  6. Switch语句的例子:

    • 提供了一个使用switch语句的简单例子。
  7. 自己尝试的Switch语句例子:

    • 展示了自己编写的一个使用switch语句的例子。
  8. 关键字typedef

    • 解释了typedef关键字的用法,给类型取别名。
  9. 关键字static

    • 讨论了static关键字在不同情况下的应用,包括修饰局部变量、全局变量、函数。
  10. 使用static修饰全局变量:

    • 说明了使用static修饰全局变量的作用。
  11. 使用static修饰函数:

    • 讨论了使用static修饰函数的情况。
  12. 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;
}

static的本质.png

图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;
}

继续前进吧!

参考链接:www.bilibili.com/video/BV1Vm…