结构体使用与指针的理解

dates.b = 2;

intcms(&dates);

}

上述调用中采用的结构体变量。在传入函数时通过指针 void *para 指针传递过去。需要注意的是不能直接使用 para->a 来访问结构体的成员。为什么呢。这是因为para只是接收过来的地址。para虽然指向的结构体的首地址。但是这个指针并不知道自己指向的是什么内容和有多少成员。需要 (date *)para 强制转化一下。这样para就可以知道自己是什么类型的指针。有多少成员。

typedef struct{

int a;

int b;

}date;

static int intcms(void *para){

int c = ((date *)para)->a;

printf( "c is %d\n",c);

}

int main(int argc, char **argv)

{

date *dates = (date *)malloc(sizeof(date));

dates->a = 9;

dates-> = 2;

intcms(dates);

free(dates);

}

上述代码使用结构体指针需要分配空间和释放空间。这是堆的使用。如果你不释放。在整个进程结束的时候。系统有会自动回收。简单的程序没什么问题。但是在需要分配大量的空间就可能导致出资源浪费或者内存耗尽的情况

三:结构体定义的几种方法 #include

#include

#include

/*先定义几类结构体*/

struct str{

int a;

int b;

}str1;

/*这是第一类结构体的形式,有结构体名,有结构体变量*/

struct str2{

int a;

int b;

};

/* 这是第二类结构体的形式,有结构体名,无结构体变量 */

typedef struct {

int a;

int b;

}STR3;

/* 这是第三类结构体的形式,把结构体重定义为STR3 */

typedef struct str4{

int a;

int b;

}STR4;

/*这是第四类结构体的形式,把结构体重定义为STR4,还有结构体名称*/

void main

{

/*定义各类的指针*/

struct str *p;

struct str2 *p2;

STR3 *p3;

struct str4 *p4;

STR4 *p5;

/*-----------------------------------------------*/

p = &str1; /*结构体指针指向结构体变量的地址首地址*/

p->a=1;

p->b=2;

printf( "p->a=%d,p->b=%d\n",p->a,p->b);

/*-----------------------------------------------*/

p2 = (struct str2 *)malloc(sizeof(struct str2)); /*为结构体指针分配对应结构体类型的大小的首地址*/

p2->a=1;

p2->b=2;

printf( "p2->a=%d,p2->b=%d\n",p2->a,p2->b);

/*-----------------------------------------------*/

p3 = (STR3 *)malloc(sizeof(STR3)); /*为结构体指针分配对应结构体类型的大小的首地址*/

p3->a=1;

p3->b=2;

printf( "p3->a=%d,p3->b=%d\n",p3->a,p3->b);

/*-----------------------------------------------*/

p4 = (struct str4 *)malloc(sizeof(struct str4));/*为结构体指针分配对应结构体类型的大小的首地址*/

p4->a=1;

p4->b=2;

printf( "p4->a=%d,p4->b=%d\n",p4->a,p4->b);

struct str4 str4a;

p4 = &str4a;/*结构体指针指向结构体变量的地址的首地址*/

p4->a=1;

p4->b=2;

printf( "p4->a=%d,p4->b=%d\n",p4->a,p4->b);

/*--------------------------------------------------*/

/*-----------------------------------------------*/

p5 = (STR4 *)malloc(sizeof(STR4));/*为结构体指针分配对应结构体类型的大小的首地址*/

p5->a=1;

p5->b=2;

printf( "p5->a=%d,p5->b=%d\n",p5->a,p5->b);

p5 = &str4a;/*结构体指针指向结构体变量的地址的首地址*/

p5->a=1;

p5->b=2;

printf( "p5->a=%d,p5->b=%d\n",p5->a,p5->b);

/*--------------------------------------------------*/

}

运行结果如下:

本文参考:

1.本土半导体企业跟风涨价、扩产?要三思而后行!

2.开源的六大谎言,你中了几条??

3.手把手教你嵌入式C语言优化技巧

4.为什么RISC-V受追捧?用RISC-V微控制器开发难不难?本文告诉你~

5.做嵌入式开发,这2个设计思想要掌握!

6.不同复位类型设置对MCUXpresso IDE在线调试有何影响?

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。返回搜狐,查看更多


高僧大德火化后为什么会有舍利?
15元香烟有哪些?这10款高性价比香烟推荐,老烟民都说好!