美文网首页数据结构
数据结构 第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节 地址、参数、结构体复习

    所有的指针变量只占4个子节 用第一个字节的地址表示整个变量的地址 如何通过函数修改实参的值 无论要通过函数改写什...

  • container_of

    功能 通过结构体成员变量的地址获取其结构体变量(container)的地址。 第一个参数 ptr 是成员的地址 第...

  • 结构体

    type 结构体名 struct{} 结构体作为函数的参数 传值不改值 不传地址

  • Go语言之结构体嵌套

    Go语言之结构体嵌套 在type Student2 struct结构体中,注意book参数引用的是地址,方便修改数据

  • OVS 源码分析整理

    OVS 核心代码 OVS 架构 OVS 主要的数据结构数据结构关系图主要的数据结构和数据结构的参数数据结构代码 d...

  • Swift 结构体

    结构体的介绍 结构体是由一系列具有相同类型或者不同类型的数据结构构成的数据集合 结构体是一种数据结构 结构体是数值...

  • 目录 - 数据结构

    总目录 数据结构 第01局:绪论 数据结构 第02局:线性表 上 数据结构 第03局:线性表 下 数据结构 第04...

  • PHP笔记记录

    PHP底层 1、联合体的数据结构是 2、结构体的数据结构是

  • iOS runtime(一)数据结构和元类

    Runtime全方位装逼指南Runtime系列(浅析数据结构) 数据结构 Class:结构体objc_class的...

  • Learn Golang In Day 9

    Learn Golang In Day 9 简介 结构体是自定义的数据结构 定义结构体 package main ...

网友评论

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

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