戏说c语言: 阶段性总结二

2024-02-29 21:36
文章标签 语言 总结 阶段性 戏说

本文主要是介绍戏说c语言: 阶段性总结二,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

师弟:“师兄,我终于和我喜欢的女生在一起了。感谢师兄呀。”
我:“恭喜啊,师弟!”
师弟:“这要全靠这段学习c的缘分了啊,两个人没事交流c语言,一起去上课,共同成长。”
我:“这叫缘分天注定。看你成为了笑道最后的人了吧。”

c语言的学习也是一样的,需要持续性的学习和投入。不断地去试错,不要因为一次bug,而望而却步。

总结

经过几番努力,终于完成了一个初版的学生成绩管理系统。这个只是一个系统初版模型,还有很多提高和优化的地方。但是这个系统,基本上将学习到的最基本的c的知识应用其中。现在我们来回顾总结一下。

学生成绩管理系统
有人说指针是c语言中最难学习的部分,要说指针难吧,也难,要说不难,也不难,正如彭端淑所说:“天下事,难易乎,为之,则难者亦易矣。”就看你有没有去学习的心态。现我们也将指针的一些典型用法做如下的总结。
指针一些典型用法主要有:
1. 访问数组元素:指针可以遍历数组元素。如学生系统中的students的访问,代码片段如下:

Student *students; // 学生数组指针for(i = 0; i < student_count; i++) {if(students[i].id == id) {students[i].score = score;printf("Score added successfully!\n");return;}
}

2. 动态内存分配:指针用于动态分配内存,通过malloc、calloc、realloc和free等函数。如学生系统的代码片段:

Student *stu_sys;
stu_sys = malloc(num * sizeof(Student));

3. 函数参数的传递:使用指针可以传递函数参数的引用,使得函数能够修改实参的值。如学生系统的代码片段:

void swap(Student *a, Student *b)
{Student tmp = *a;*a = *b;*b = tmp;
}

4. 指向指针的指针(二级指针或多级指针):动态分配二维数组或处理指针数组等。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{int i;// 动态分配一个字符串数组char **str_array = (char **)malloc(3 * sizeof(char *));str_array[0] = (char *)malloc(20 * sizeof(char));str_array[1] = (char *)malloc(20 * sizeof(char));str_array[2] = (char *)malloc(20 * sizeof(char));strcpy(str_array[0], "Hello,");strcpy(str_array[1], "World!");strcpy(str_array[2], "Greetings!");for (i = 0; i < 3; i++) {printf("%s ", str_array[i]);free(str_array[i]); // 释放每个字符串的内存}printf("\n");free(str_array); // 释放字符串数组的内存return 0;
}

5. 操作字符串:字符串是通过字符数组实现的,用字符指针可以操作字符串。

#include <stdio.h>int main() {char str[] = "Hello, World!";char *ptr = str; // ptr 指向 str 的第一个字符// 当没有到达字符串的结束符 '\0' 时循环while(*ptr != '\0') {printf("%c", *ptr); // 输出当前字符ptr++; // 移动指针到下一个字符}printf("\n");return 0;
}

6. 函数指针:函数指针指向函数,可以用来实现回调函数和函数的多态调用。在dpdk调用驱动的时候,使用的比较多,这样对于不同的驱动,接口名都是一个。

#include <stdio.h>// 几个简单的数学函数
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int divi(int a, int b) { return b != 0 ? a / b : 0; }int main()
{// 定义一个函数指针数组并初始化int (*operations[4])(int, int) = {add, sub, mul, divi};// 使用函数指针数组来执行操作int i;int a = 10, b = 5;char *names[] = {"Addition", "Subtraction", "Multiplication", "Division"};for (i = 0; i < 4; i++) {printf("%s: %d\n", names[i], operations[i](a, b));}return 0;
}// 输出:
// Addition: 15
// Subtraction: 5
// Multiplication: 50
// Division: 2

7. 在数据结构中的应用:使用指针可以构造链表、树和图等复杂的动态数据结构。如学生系统中结构体的定义:

typedef struct student {int id; // 学号char name[MAX_NAME_LEN]; // 姓名float score; // 成绩struct student *next;
} Student;

8. IO操作:文件IO(fread、fwrite等)通常使用指针来指向数据缓冲区。如学生系统中的写文件操作:

int write_student_info(Student *s)
{FILE *fp = fopen(STUDENT_SYSTEM, "a");if (fp == NULL) {printf("fopen student_system failed!\n");return 1;}fprintf(fp, "%-4d %-10s %-.2f\n", s->id, s->name, s->score);fclose(fp);return 0;
}

自此,我们迈入了c语言的大门。后面能够走多远,就看做了多少的练习。

《C专家编程》
《C陷阱和缺陷》
《深入理解操作系统》

这篇关于戏说c语言: 阶段性总结二的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/760166

相关文章

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

python3中正则表达式处理函数用法总结

《python3中正则表达式处理函数用法总结》Python中的正则表达式是一个强大的文本处理工具,用于匹配、查找、替换等操作,在Python中正则表达式的操作主要通过内置的re模块来实现,这篇文章主要... 目录前言re.match函数re.search方法re.match 与 re.search的区别检索

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

Go语言中如何进行数据库查询操作

《Go语言中如何进行数据库查询操作》在Go语言中,与数据库交互通常通过使用数据库驱动来实现,Go语言支持多种数据库,如MySQL、PostgreSQL、SQLite等,每种数据库都有其对应的官方或第三... 查询函数QueryRow和Query详细对比特性QueryRowQuery返回值数量1个:*sql

GO语言中gox交叉编译的实现

《GO语言中gox交叉编译的实现》本文主要介绍了GO语言中gox交叉编译的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、安装二、使用三、遇到的问题1、开启CGO2、修改环境变量最近在工作中使用GO语言进行编码开发,因