• 数据结构复习之C语言指针与结构体


    数据结构指针复习:
    #include <stdio.h>
    
    void main()
    {
        int a[5] = {8, 2, 3, 4, 5};
        
        // a[3] == *(3+a)
    
        printf("%d
    ", *(3+a)); // a[3] 4
        printf("*a其实就是a[0]: %d
    ", *a); // 8
    
        // 地址是连续的
        printf("%p
    ", a+1);
        printf("%p
    ", a+2);
        printf("%p
    ", a+3);
    }
    
    

    一维数组名是个指针常量,它存放的是一维数组第一个元素的地址,它的值不能被改变,
    一维数组名指向的是数组的第一个元素的地址。(获取)修改一个数组,就是要把数组的第一个元素的地址和数组的长度传递进去就行了。

    #include <stdio.h>
    
    void Show_Array(int *p, int len)
    {
        p[0] = -1;
        int i;
        
        for(i = 0; i < len; i++)
        {
            p[i] = p[i] + 1;
            printf("%d
    ", p[i]);
        }
    
    }
    
    int main(void)
    {
        int a[5] = {1, 2, 3, 4, 5};
    
        Show_Array(a, 5); // a等价于&a[0], &a[0]本身就是int *类型
    
        return 0;
    }
    通过函数修改实参的值:
    #include <stdio.h>
    
    void f(int *p)
    {
        *p = 99;
    }
    
    int main(void)
    {
        int i = 10;
        
        f(&i);
        printf("%d
    ", i);
        
        return 0;
    }
    
    
    
    结构体使用概述:
    结构体只有属性,没有方法。结构体是类的一个过渡。
    为什么会出现结构体?
        为了表示一些复杂的数据,而普通的基本类型无法满足要求。
    什么叫结构体?
        结构体是用户根据实际需要自己定义的复合数据类型。
    #include <stdio.h>
    #include <string.h>
    
    struct Student    // 定义了一个新的数据类型
    {
        int sid;
        char name[200];
        int sage;
        
    }; // 分号不能省
    
    int main(void)
    {
        // 定义一个数据类型是struct Student的变量st
        struct Student st = {1000, "zhangsan", 20};
        printf("%d %s %d
    ", st.sid, st.name, st.sage);
        
        st.sid = 99;
        strcpy(st.name, "lisi");
        st.sage = 22;
        printf("%d %s %d
    ", st.sid, st.name, st.sage);
        
        return 0;
    }
    
    
    
    #include <stdio.h>
    
    struct Student
    {
        int sid;
        char sname[200];
        int sage;
    };
    
    int main(void)
    {
        struct Student st = {1000, "zhangsan", 20};
    
        // st.sid
    
        // 定义一个指针变量
        struct Student *pst;
        pst = &st;
        pst->sid = 99; // 等价于(*pst).sid, st.sid
    
        return 0;
    }

    结构体的实现,两种方式:
    struct Student st = {1000, "zhangsan", 20};
    struct Student *pst = &st;
    1. st.sid
    2. pst->sid
    pst所指向的结构体变量中的sid这个成员
    pst是指向结构体变量的指针,*pst就是st

    int *p;
    p是指针变量,*p是普通变量。

    注意:
    结构体变量不能加减乘除,但可以相互赋值
    普通结构体变量和结构体指针变量作为函数传参的问题

     
  • 相关阅读:
    TBDR下msaa 在metal vulkan和ogles的解决方案
    Load store action in vulkan & ogles 的解决方案
    百度 我日你全家
    metal sample code
    NativeRenderingPlugin IOS
    ranch实现游戏服务器
    erlang游戏开发tcp
    Erlang 命令行监控工具
    rebar安装及创建项目
    erlang中如何调试程序
  • 原文地址:https://www.cnblogs.com/lqcdsns/p/6569186.html
Copyright © 2020-2023  润新知