数据结构_郝斌_预备知识2

#include <stdio.h>

int main(void)
{
    double * p;
    double x = 66.6;

    p = &x;           //x占八个字节 一个字节是八位 一个字节一个地址

    double arr[3] = {1.1,2.2,3.3};
    double *q;
    
    q = &arr[0];
    printf("%p
", q);           //%p实际就是以十六进制输出
    q= &arr[1];
    printf("%p
", q);

    return 0;
    
}

结构体

  1. 为什么会出现结构体
    为了表示一些复杂的数据,而普通的基本数据类型无法满足要求
  2. 什么叫结构体
    结构体是用户根据实际需要自己定义的复合数据类型
  3. 如何使用结构体

struct Student st = {1000, "zhangsan", 20};
struct Student * pst = &st;

  1. st.sid

  2. pst->sid //pst所指向的结构体变量中的sid这个成员

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

动态内存的分配和释放

#include <stdio.h>
#include <malloc.h>

int main(void)
{
    int a[5] = {4,10,2,8,6};

    int len;
    printf("请输入你需要分配的数组的长度:len =");
    scanf("%d", &len);
    int * pArr = (int *)malloc(sizeof(int) * len);
    *pArr = 4;          //类似于 a[0] =4
    pArr[1] = 10;       //类似于 a[1] = 10
    printf("%d%d
",*pArr, pArr[1]);

    //我们可以把pArr当作一个普通数组来使用
    for(int i=0; i<len; ++i)
    scanf("%d",&pArr[i]);

    for(int j=0; j<len; ++j)
    printf("%d
", *(pArr+j));

    free(pArr);          //把pArr所代表的动态分配的20个字节的内存释放
    return 0;
}

跨函数使用内存

  • malloc()动态分配的内存如果不用free()释放就会一直占用直到程序结束
 A *pa = (A *)malloc(sizeof(A) );        //C   
 A aa = new A();                         //Java
  • 动态内存举例
#include <stdio.h>
#include <malloc.h>

struct Student
{
   int sid;
   int age;
};

struct Student * CreateStudent(void);
void ShowStudent(struct Student *);

int main(void)
{
   struct Student *ps;

   ps = CreateStudent();
   ShowStudent(ps);

   return 0;
}

struct Student * CreateStudent(void)
{
   struct Student * p = (struct Student *)malloc( sizeof(struct Student) );
   p->sid = 99;
   p->age = 88;
   return p;
}

void ShowStudent(struct Student *pst)
{
   printf("%d %d
", pst->sid, pst->age);
}

2020/04/05

本文来自博客园,作者:小恒2020,转载请注明原文链接:https://www.cnblogs.com/xiaoheng2020/p/12663483.html

原文地址:https://www.cnblogs.com/xiaoheng2020/p/12663483.html