0%

C语言入门教程

C语言是一门通用的、过程式的编程语言,由 Dennis Ritchie 在 1972 年于贝尔实验室开发。它是现代计算机科学的基石,许多其他语言(如 C++、Java、Python)都受到了 C 语言的影响。

C 语言概述

C 语言的特点

  • 高效性:C 语言是编译型语言,执行速度快
  • 灵活性:可以直接操作内存
  • 可移植性:代码可以在不同平台上编译运行
  • 简洁性:语法简洁,关键字少
  • 强大的表达能力:支持指针、位运算等低级操作

C 语言的应用场景

  • 操作系统内核开发(Linux、Unix)
  • 嵌入式系统开发
  • 编译器和解释器开发
  • 高性能计算
  • 游戏引擎开发

第一个 C 程序

1
2
3
4
5
#include <stdio.h>

int main(void) {
printf("Hello, C!\n");
return 0;

代码解释:

  • #include <stdio.h>:包含标准输入输出库
  • int main(void):主函数,程序的入口
  • printf("Hello, C!\n"):打印输出
  • return 0:返回值,表示程序正常结束

编译与运行

1
2
3
# 编译
gcc hello.c -o hello
# 运行
1
2
./hello
Hello, C!

数据类型与变量

基本数据类型

1
2
3
4
5
6
7
int age = 25;        // 整数
float weight = 65.5; // 单精度浮点数
double pi = 3.14159; // 双精度浮点数
char grade = 'A'; // 字符
char name[] = "张三"; // 字符串
short num1 = 10; // 短整型
long num2 = 1000000; // 长整型

类型修饰符

  • signed:有符号
  • unsigned:无符号
  • const:常量
  • volatile:易变

指针

指针是 C 语言最重要的特性之一,它存储变量的内存地址。

指针的定义与使用

1
2
3
4
5
6
7
int num = 10;
int *p; // 定义指针变量
p = &num; // 取地址
printf("%d\n", *p); // 解引用,输出 10
printf("%p\n", p); // 输出地址
printf("%p\n", &num); // 输出 num 的地址

指针与数组

1
2
3
4
5
6
7
8
int arr[] = {1, 2, 3, 4, 5};
int *p = arr; // 数组名就是首元素地址

for (int i = 0; i < 5; i++) {
printf("%d ", *(p + i)); // 输出 1 2 3 4 5
}
printf("\n");

指针与函数

1
2
3
4
5
6
7
8
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}

int x = 1, y = 2;
swap(&x, &y); // 交换 x 和 y 的值

数组

一维数组

1
2
3
4
5
6
int arr[5] = {1, 2, 3, 4, 5};  // 初始化数组
int arr2[10] = {0}; // 全部初始化为 0
int arr3[] = {10, 20, 30}; // 自动推断大小

printf("%d\n", arr[0]); // 访问第一个元素
printf("%ld\n", sizeof(arr)); // 数组总大小

二维数组

1
2
3
4
5
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

字符串

C 语言中没有原生的字符串类型,字符串是以 \0 结尾的字符数组。

1
2
3
4
5
6
7
8
char str[] = "Hello";  // 自动添加 \0
char str2[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

printf("%s\n", str); // 输出字符串
printf("%d\n", strlen(str)); // 字符串长度
strcpy(str2, str); // 字符串复制
strcat(str, " World"); // 字符串拼接
strcmp(str, str2); // 字符串比较

结构体

结构体用于将不同类型的数据组合在一起。

1
2
3
4
5
6
7
8
9
10
11
12
struct Person {
char name[20];
int age;
float height;
};

struct Person p = {"张三", 25, 1.75};
printf("%s\n", p.name); // 访问成员
printf("%d\n", p.age); // 访问成员

struct Person *ptr = &p;
printf("%s\n", ptr->name); // 指针访问成员

文件操作

1
2
3
4
5
6
7
8
9
10
11
12
// 写入文件
FILE *fp = fopen("test.txt", "w");
if (fp != NULL) {
fprintf(fp, "Hello, C!\n");
fclose(fp);
}

// 读取文件
fp = fopen("test.txt", "r");
if (fp != NULL) {
fscanf(fp, "%s", buf);
fclose(fp);

内存管理

C 语言需要手动管理内存分配和释放。

1
2
3
4
5
6
7
int *p = (int *)malloc(10 * sizeof(int));
if (p != NULL) {
// 使用内存
free(p); // 释放内存
p = NULL; // 防止野指针
}

控制流程

条件语句

1
2
3
4
5
6
7
if (score >= 90) {
printf("优秀\n");
} else if (score >= 80) {
printf("良好\n");
} else {
printf("继续努力\n");
}

循环语句

1
2
3
4
5
6
7
8
for (int i = 0; i < 10; i++) {
printf("%d ", i);
}

int j = 0;
while (j < 10) {
printf("%d ", j++);
}

函数

1
2
3
4
5
6
7
8
int add(int a, int b) {
return a + b;
}

int main(void) {
int result = add(3, 5);
printf("%d\n", result); // 输出 8
}

总结

本文介绍了 C 语言的基础知识,包括:

  • C 语言的特点和应用场景
  • 基本数据类型和变量
  • 指针的概念和使用
  • 数组和字符串
  • 结构体
  • 文件操作
  • 内存管理
  • 控制流程和函数

C 语言是学习计算机科学的基础,掌握 C 语言有助于理解计算机的底层原理。建议多动手实践,通过编写程序来加深理解。

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道