zoukankan      html  css  js  c++  java
  • C语言基础:C语言结构体(6)

    上一节课, 我们讲解了指向结构体的指针, 这次我们来讲讲, 结构体与函数~~


    下面我们来看一个小例子:

    #include <stdio.h>
    
    struct Student
    {
        int age;
        char *name;
    };
    
    void test(struct Student s)
    {
        s.age = 30;
        s.name = "呵呵";
        printf("age = %d    name = %s
    ", s.age, s.name);
    }
    
    int main()
    {
        struct Student stu = {28, "小明"};
        
        test(stu);
        
        printf("age = %d    name = %s
    ", stu.age, stu.name);
        
        return 0;
    }
    输出结果:


    有些人会有疑问, 我不是在调用函数的时候改了里面的值吗? 为什么输出的结果会不同呢??

    其实原因很简单, 让我们来看看示意图:


    首先, 两个结构体的地址是不相同, 所以改了里面的值, 外面的结构体并不会改变, 而代码里面的调用, 只是简简单单的把一个结构体成员的值对应赋值给另一个结构体成员而已, 所以输出的结果并不会相同, 同样, 下面这个例子也是一样, 让我们来看看:

    #include <stdio.h>
    
    struct Student
    {
        int age;
        char *name;
    };
    
    void test(struct Student *p)
    {
        struct Student stu2 = {15, "小李"};
        p = &stu2;
        p->age = 25;
        p->name = "小黑";
        printf("age = %d  name = %s
    ", stu2.age, stu2.name);
    }
    
    int main()
    {
        struct Student stu = {28, "小明"};
        
        test(&stu);
        
        printf("age = %d    name = %s
    ", stu.age, stu.name);
        
        return 0;
    }

    输出的结果:



    让我们来看看示意图, 为什么输出的结果不一样:


    一开始, 在main函数里, 传入进去的的确是stu的地址, 但是进到去test函数之后, p指针又指向了stu2的地址, 所以存的地址是sut2的, 而后面所改的值也是stu2的值, 所以stu输出的结果和原来的值一样, 而stu2输出的结果和原来的值不同.


    还有另外一种使用方法, 我们来看看例子:

    #include <stdio.h>
    
    struct Student
    {
        int age;
        char *name;
    };
    
    void test(struct Student *p)
    {
        p->age = 30;
        p->name = "李四";
        printf("p = %d  p = %s
    ", p->age, p->name);
    }
    
    int main()
    {
        struct Student stu = {28, "小明"};
        
        test(&stu);
        
        printf("age = %d    name = %s
    ", stu.age, stu.name);
        
        return 0;
    }

    输出的结果:


    好了, 这次我们就讲到这里, 下次我们继续~~~

  • 相关阅读:
    hdu1556 Color the ball
    HDU
    《解读window核心编程》 之 字符和字符串处理方式
    WebService之CXF注解之四(測试类)
    gdal以GA_Update方式打开jpg文件的做法
    贪吃蛇源代码分析
    极光消息推送服务器端开发实现推送(上)
    2014,为了梦想宁愿破釜沉舟
    小强的HTML5移动开发之路(37)——jqMobi快速入门
    你可能不知道的5种 CSS 和 JS 的交互方式
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282881.html
Copyright © 2011-2022 走看看