c语言结构体的灵活运用,C语言结构体的全面应用

本文为C语言结构的应用总结,C语言没有类的概念,但可以通过结构体构建一个类似类的操作概念。下文是使用的场景代码,由于水平有限,错误之处请各位大神指出。在此抛砖引玉,希望做嵌入式的的人能提供更多的应用的典型案例。

#include#include/*结构体定义 */

//只有结构类型的定义

struct stuff

{

char job[20];

int  age;

float height;

};

//含有结构体类型的结构体变量初始化定义

struct stuff1

{

char job[20];

int  age;

float height;

}Hu;

//struct stuff1  Hu //就相当于这样子

// 结构体不能再用来定义同类型的结构体变量,一锤子买卖;

struct

{

char job[20];

int  age;

float height;

}Hu1;//这种类型的结构体变量只能有这么一个,不能去定义其他的

/*结构体别名声明 */

typedef struct Stu

{

char job[20];

int  age;

float height;

}Stuff,*PtrStuff;

Stuff      Sam;//等于 struct Stu Sam;

PtrStuff  pSam;//等于 struct Stu *Sam;

/*结构体与其他类型 */

typedef struct arraychange

{

int cnt;

char pc[0];

}arraychange;//pc数组只能放在最后,不能调换位置;柔性数组,少用;

struct check

{

union

{

char a;

};

int i;

}CheckSystem; //系统内存大小端测试,结构体与联合体结合

struct structureA

{

struct structureB

{

int c;

}b;  //必须要有实体才能够在后面使用struct structureB bb;

struct structureB bb;

}a;//结构体中含有结构体;

//函数可以用结构体元素,结构体,结构体指针做参数;用元素与普通没什么区别,用结构体则拷贝副本,指针是唯一的;函数可以返回结构体,使用指针的效率高

void func1(int par);        //结构体元素

Stuff func2(Stuff par);      //结构体,返回结构体

void func3(PtrStuff par); //结构体指针

void print(Stuff par);

//结构体含有函数指针做元素,这样就可以实现类似面向对象的类封装

int fun1(int age,int weight);

void fun2(int age,int weight);

struct Fun

{

int age;

int weight;

int (*pfun1)(int age,int weight);  //函数还有一个int返回值,两个int参数

void (*pfun2)(int age,int weight);  //函数没有返回值,两个int参数

};

int main(void)

{

/*结构体作为函数参数 */

Stuff    test,tmptest;

PtrStuff  ptest=&test;

/*结构体含有函数指针*/

struct Fun myfun={10,45,fun1,fun2};

struct Fun *ptrmyfun=&myfun;

int age=22,weight=60,temp=0;

/*结构体作为函数参数 */

strcpy(test.job,"manager");

test.age=25;

test.height=1.65;

func1(test.age);

tmptest=func2(test);

print(tmptest);

func3(ptest);

print(test);

/*结构体含有函数指针*/

temp=myfun.pfun1(age,weight); //成员调用函数

printf("temp %d\n",temp);

myfun.pfun2(age,weight);  //成员调用函数

myfun.age=80;

myfun.weight=65;

temp=ptrmyfun->pfun1(myfun.age,myfun.weight); //指针调用函数

printf("temp %d\n",temp);

ptrmyfun->pfun2(myfun.age,myfun.weight);    //指针调用函数

return 0;

}

void print(Stuff par)

{

printf("your job is:%s\n",par.job);

printf("your age is:%d\n",par.age);

printf("your height is:%f\n",par.height);

}

void func1(int par)

{

printf("your age is:%d\n",par);

}

Stuff func2(Stuff par)

{

strcpy(par.job,"Engineer");

par.age=30;

par.height=1.80;

return par;

}

void func3(PtrStuff par)

{

strcpy(par->job,"Programmer");

par->age=19;

par->height=170;

}

int fun1(int age,int weight)

{

int temp=0;

temp=age+weight;

return temp;

}

void fun2(int age,int weight)

{

printf("your age is:%d\n",age);

printf("your weight is:%d\n",weight);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值