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

2024-02-29 1202阅读

温馨提示:这篇文章已超过405天没有更新,请注意相关的内容是否还可用!

前言

师弟:“师兄,我终于和我喜欢的女生在一起了。感谢师兄呀。”

我:“恭喜啊,师弟!”

师弟:“这要全靠这段学习c的缘分了啊,两个人没事交流c语言,一起去上课,共同成长。”

我:“这叫缘分天注定。看你成为了笑道最后的人了吧。”

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

总结

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

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

有人说指针是c语言中最难学习的部分,要说指针难吧,也难,要说不难,也不难,正如彭端淑所说:“天下事,难易乎,为之,则难者亦易矣。”就看你有没有去学习的心态。现我们也将指针的一些典型用法做如下的总结。

指针一些典型用法主要有:

1. 访问数组元素:指针可以遍历数组元素。如学生系统中的students的访问,代码片段如下:

Student *students; // 学生数组指针
for(i = 0; i  

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 
#include 
#include 
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  

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

#include 
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 
// 几个简单的数学函数
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  

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陷阱和缺陷》

《深入理解操作系统》

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]