美文网首页
结构体的动态内存分配与别名

结构体的动态内存分配与别名

作者: 贝克街的猫大哥呀 | 来源:发表于2017-08-21 00:58 被阅读0次

回顾一下,以前讲的用malloc的动态内存分配,返回值是一个指针,指向的是这块内块的地址。 结构体其实也是一样的。例下

struct Student{

   char* name;

   int age;

};

void main(){

   struct Student* p = (struct Student*)malloc(sizeof(struct Student) * 10);

   p->age = 20;

   p->name = "watson";

   printf(p->name);

   free(p);

   system("pause");

}

关键 struct Student* p = (struct Student*)malloc(sizeof(struct Student) * 10);  可能看出,这样写,返回的,就是一个结构体的指针对象,右边还有一个强制转形,因为返回的是一个void* ,如果不转形,在C中可能没问题,在LIUNX中貌似就会出问题,所以还是采用标准写法

这里直接对p进行操作,根据以前的讲解,就是操作的第一个元素,p++后,就是操作第二个元素,所以可以利用指针的加减法来进行遍历过程

最后,用完动态内存都要记得释放掉

再讲讲别名

typedef struct Student{

   char name[20];

   int age;

}S,*S1;

void main(){

   S s = {"waston",11};

   S1 s1 = &s;

   printf(s1->name);

    system("pause");

}

用typedef来定义一个别名,这里定义了结构体的别名S,还定义了一个结构定的指针别名S1,在main中可以看出,真的跟JAVA的写法越来越像了。

最后讲结构体中的函数指针

typedef struct Student{

   char *name;

   int age;

   void(*sayHi)(char*);

}Student;

typedef Student *StudentP;

void say(char *text){

  printf("SAYHI");

}

void main(){

   Student s = {"watson",11,say};

   StudentP p = &s;

   p->sayHi("saysomething");

   system("pause");

}

首先是定义了一个和结构体名一样的别名,为什么这样定义呢,因为方便,申明的时候可能不写struct几个词,其次是定义了一个结构体指针

结构定中,定义了一个函数指针! 和以前讲的一样,只需要定义函数指针的返回值,以及参数类型就行了。

在外部传入一个同样结构的方法就行! 直接把方法名传入就行,因为方法名就是它的内存地址,就是指针,和&say是一样的效果。

其它逻辑和一起说的一样。

相关文章

  • NDK启航篇——C语言基础(结构体补充)

    继续昨天的内容,把结构体剩下的一点内容写完。 结构体与动态内存分配 typedef 类型取别名 取别名便于使用 不...

  • C语言-5、结构体

    写法一 写法二 写法三 结构体指针 结构体指针 与 动态内存开辟 结构体的数组 结构体与结构体指针 取别名 取别名...

  • 结构体与结构体指针数组

    1.结构体定义与使用。 2.结构体指针 与 动态内存开辟。 3.结构体的数组。 4.结构体与结构体指针 取别名。 ...

  • 结构体的动态内存分配与别名

    回顾一下,以前讲的用malloc的动态内存分配,返回值是一个指针,指向的是这块内块的地址。 结构体其实也是一样的。...

  • C语言内存管理一本道来

    动态内存分配 我们需要动态内存分配的原因 C语言中的一切操作都是基于内存的 变量和数组都是内存的别名,如何分配这些...

  • 链表的创建与插入

    使用链表保存结构体,结构体只有一个成员num。重点理解: 在分配动态内存空间,返回值是指针。导致不太好理解了,万恶...

  • freertos的动态内存分配之heap_1.c解析

    一、freertos的动态内存分配原理 首先,freertos的动态内存分配是一种“假”动态内存分配策略。所谓“假...

  • 动态内存分配

    程序需要动态内存分配的原因很简单,在很多时候,只有在程序实际运行时,我们才知道某些数据结构的大小。 动态内存分配器...

  • 函数指针,联合体,枚举,结构体和结构体指针

    函数指针 联合体 枚举 别名 结构体 结构体指针

  • swift-结构体异变方法

    结构体值类型使用 测试结构体与类的内存分配 做一个简单测试实例,对比结构体 与 类,主要参考耗时 image.pn...

网友评论

      本文标题:结构体的动态内存分配与别名

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