结构体指针示例解析

c语言之结构体指针返回值

[声明][6]:个人知识有限,所写内容纯属个人理解,有错误的地方欢迎大家指出,一块学习改正。
[餐前小叙][6]:“学习”C语言已经很长时间了,从大二开始接触编程,之后开始参加各种各样的电子竞赛、智能车大赛,直到研究生毕业,工作到现在,写的C程序加起来也不少了。但是工作之前写的c语言程序根本不会考虑程序的运行效率,代码的质量。不知道大家有没有同样的感受,在校时的程序很少会用到指针、结构体、枚举等等,也很少会用到malloc,free等类似的函数。工作后觉得自己应该重新的对C语言学习。今天我就自己用最简单的命名方式及语句编写了一个很小很小的程序,学习一下结构体、指针的相关知识。
now begin…..
先粘一下个人代码吧

代码块

#include <stdio.h>
#include <malloc.h>
typedef struct one
{
    __int32 name;
    char   age;
}boy;
typedef struct two
{
    __int32 name;
    char   age;
}girl;

typedef struct test
{
    boy zhangsan;
    girl lisi;
}student;
typedef enum 
{   
    err,//0
    right,//1
}ICturn;

ICturn add(girl *oonr,boy *oner,char *sum,student *stud)
{

    *sum= oonr->age+oner->age + stud->zhangsan.age ;
    return right;   
}
//在堆中开辟内存应判断是否成功,,我省略了...哈哈
int main(int argc, char *argv[])
{
    boy *boy1;
    student *stu=(student *)malloc(sizeof(student));
    girl girl1;
    boy1=(boy *)malloc(1*sizeof(boy));
    boy1->age=1;
    girl1.age=2;
    stu->zhangsan.age=1;
    char num,retu;
    retu=add(&girl1,boy1,&num,stu);
    free(boy1);
    boy1=NULL;
    free(stu);
    stu=NULL;
    printf("sum:%d!\n",num);
    return 0;
}

[程序释义:][6]程序中创建了3个非常简单的结构体,分别为boy 、girl、 student,其中student结构体中的两个元素分别是boy girl类型的zhangsan lisi成员。程序中创建了一个enum,该类型作为函数的返回值类型,在下面会介绍到。创建了一个函数add,有返回值(ICturn ),3个入参(girl *oonr,boy *oner,student *stud),一个出参((char *sum)。主函数中主要是给结构体元素赋值,调用add实现三个元素的加法,得出结果并返回成功标志。
[程序分析:][6]
boy *boy1;//定义了一个类型为boy的指针*boy1(比较懒,随意定义了一个)

student stu=(student )malloc(sizeof(student));//定义了一个类型为student 的指针stu,并为*stu开辟了一块内存。*
–>同boy1=(boy *)malloc(1*sizeof(boy));意义一样

girl girl1;//创建了一个girl类型的girl1结构体。

boy1->age=1;//为boy1所指向的age元素赋值为1;
girl1.age=2;//为girl1中的age元素赋值为2;
stu->zhangsan.age=1;//位stu所指向的zhangsan中的age赋值为1;

char num,retu;//定义了出参num及返回值retu;

接下来就开始调用函数add:
ICturn add(girl *oonr,boy *oner,char *sum,student *stud);
该函数中有入参、出参、及返回值。大家大部分用的函数功能都包含了,所有的出入参数都定义为了指针类型,返回值得类型定义为枚举类型,即返回值只能返回ICturn中两个元素中的一个,return其他值则为错误。

调用该函数时需要获取出入参数的地址,然后塞入add后面的括号中。四个参数的地址为&girl、boy1(指针类型)、&num、stu(指针类型)。
add函数中*sum= oonr->age+oner->age + stud->zhangsan.age 实现了3个入参所age相加和放到num地址中。计算成功后返回right(此处只为展示返回值类型为枚举类型时的使用方法,未做判断!)。

调用add函数后需要将之前开辟的堆空间释放掉并将其指向NULL,最后return 0 结束程序。

[个人感悟:][6]以前编写程序时,一直不明白结构体、指针的作用,个人理解,其实结构体就是为了更好的管理一个集体里的每个成员,使得整个集体的成员信息更简洁。指针的作用就更明显了,一般情况下单个int,char..类型的变量传输不会使用指针,那是因为数据量非常的小,如果涉及到多元素的数组或者结构体,直接进行数据的传输就是加大处理器的负担。举个不是很恰当的例子吧:济南的公司要研发一部新手机,但是由于公司的技术能力不足需要深圳公司方面帮助,现在有两种方案:方案一,公司将手机的物料按照响应的厂商采购完,把物料发送给深圳,让其研发。方案二,将物料的厂商地址联系方式发给深圳公司,深圳公司直接采购,然后研发。。从物料到货的角度看,直接将实物运输和将联系方式告知后采购相比,后者速度更快,效率更高,济南的公司也不会太费力气。。。。哈哈,理解理解就行,比喻不恰当,见谅。

欢迎大家提出宝贵的建议!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值