📘 C语言学习笔记:变量作用域、数组与字符串处理
📑 目录
- 变量作用域
- 全局变量 vs 局部变量
- 作用域覆盖规则
- 存储类型
static
关键字详解
- 一维数组
- 初始化与操作
- 数组传参与排序
- 字符串处理
- 输入输出函数对比
- 常用字符串函数
🔍 变量作用域
全局变量 vs 局部变量
#include <stdio.h>
int a = 22; // 全局变量,整个工程可见
static int b = 33; // 静态全局变量,仅当前文件可见void fun() {printf("fun: a=%d\n", a); // 访问全局变量
}int main() {int a = 11; // 局部变量,覆盖全局变量{int a = 33; // 语句块局部变量printf("{}: a=%d\n", a); }printf("main: a=%d\n", a); // 局部变量优先fun();return 0;
}
🚀 运行结果
{}: a=33
main: a=11
fun: a=22
🔋 存储类型
静态变量示例
#include <stdio.h>void print() {static int n = 1; // 静态局部变量,生存期延长printf("n=%d\n", n);n++;
}int main() {print(); // 第一次调用print(); // 第二次调用return 0;
}
🚀 运行结果
n=1
n=2
📦 一维数组
数组初始化与遍历
#include <stdio.h>int main() {int a[5] = {1, 2, 3}; // 部分初始化,未赋值元素为0for (int i = 0; i < 5; i++) {printf("%d ", a[i]);}return 0;
}
🚀 运行结果
1 2 3 0 0
冒泡排序实战
#include <stdio.h>void sort_arr(int a[], int size) {for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - 1 - i; j++) {if (a[j] > a[j + 1]) {int t = a[j];a[j] = a[j + 1];a[j + 1] = t;}}}
}int main() {int a[] = {5, 3, 8, 1, 2};sort_arr(a, 5);for (int i = 0; i < 5; i++) {printf("%d ", a[i]);}return 0;
}
🚀 运行结果
1 2 3 5 8
📝 字符串处理
安全输入输出对比
#include <stdio.h>int main() {char str[16];printf("输入字符串: ");fgets(str, sizeof(str), stdin); // 安全输入fputs("输出: ", stdout);fputs(str, stdout);return 0;
}
🚀 运行示例
输入字符串: Hello CSDN!
输出: Hello CSDN!
字符串函数应用
#include <stdio.h>
#include <string.h>int main() {char src[20] = "Hello";char dest[20];strcpy(dest, src); // 复制字符串strcat(dest, " World!"); // 拼接字符串printf("%s\n", dest);return 0;
}
🚀 运行结果
Hello World!
💡 核心总结
- 变量作用域:全局变量跨文件,静态变量限作用域,同名变量就近原则。
- 数组操作:初始化需谨慎,传参本质为指针,排序算法要熟练。
- 字符串安全:优先使用
fgets
避免溢出,strcpy
/strcat
注意目标空间大小。
掌握这些知识点,轻松应对C语言核心问题!🚀 欢迎在评论区讨论交流!