美文网首页数据结构
数据结构 第2节 地址、参数、结构体复习

数据结构 第2节 地址、参数、结构体复习

作者: 小超_8b2f | 来源:发表于2019-07-18 15:57 被阅读1次

    所有的指针变量只占4个子节 用第一个字节的地址表示整个变量的地址

    #incude <stdio.h>
    
    int main(void) {
      double arr[5] = {1.1, 2.2, 3.3, 4.4 ,5.5};
      double * p = &arr[0];
      printf("%p\n", p);  //%p以16进制的形式输出地址(012FF5C)
    
      p = &arr[1];
      printf("%p\n", p);  //%p以16进制的形式输出地址(012FF64)  64 -5C = 8字节
      //int 类型的话差4个,因为int是4字节长度
      return 0;
    }
    
    如何通过函数修改实参的值

    无论要通过函数改写什么类型的值,只需要传递它的地址就行了

    #incude <stdio.h>
    
    int main(void) {
       int i = 10;
       int * p = &i;
      printf("%p\n", p);  
        f(&p);
      printf("%p\n", p);  
      return 0;
    }
    
    void f(int ** q) {
      *q = (int *) 0xFFFFFFFF;
    }
    

    结构体

    1. 为什么需要结构体❓
      为了表示一些复杂的数据,而普通的基本类型变量无法满足要求。

    2. 什么叫结构体
      结构体是用户根据实际需要自己定义的复合数据类型
      结构体给人感觉模拟事物模拟的不彻底(没有方法)。但是仍然好处:以算法为核心。血手结构,算法在面向过程的结构语言里是最好,而面向对象的语言算法就不是其核心了。

    3. 如何使用结构体

    #include <stdio.h>
    
    struct Student {
      int sid;                  //不叫属性,叫成员。Java才叫属性
      char name[200];
      int age;
    }; //分号不能省略
    
    int main(void) {
      struct Student st = {1, "xiaochao", 22};
      printf("%d, %s, %d \n", st.sid, st.name, st.age);
    
      st.sid = 1000;    //第一种访问方式
     // st.name = "xiaoyi"; error
      strcpy(st.name, "lisi");  //Java的内核就是用C和C++写的,所以Java的String实际内部都是这样实现的。
      st.age = 28;
    
      struct Student * pst = &st;  //第二种方式,最常用
      pst->age = 22;  //等价于 (*pst).age = st.age 
    }
    
    //这种方式不好,因为需要>208字节的变量作为参数传递
    //耗内存,耗时间
    void printStudent(struct Student st) [
      printf("%d, %s, %d \n", st.sid, st.name, st.age);
    }
    
    //这种方式好,因为只需要4字节的参数变量
    void printStudent2(struct Student * st) {
      printf("%d, %s, %d \n", st.sid, st.name, st.age);
    }
    

    结构体的2种变量使用方式

    1. st.age
    2. pst->age pst所指向的结构体变量中的age这个成员
    1. 注意事项
      结构体变量不能相互之间加减乘除,但能相互赋值
      普通结构体变量和结构体指针变量

    数据结构是研究数据存储
    算法研究数据的操作

    相关文章

      网友评论

        本文标题:数据结构 第2节 地址、参数、结构体复习

        本文链接:https://www.haomeiwen.com/subject/zokbkctx.html