C语言结构体(七)


简化结构体

struct name {
    int b;
}tt,*ss;



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//结构
struct MyFirstStu
{
    char name[9];
    char sex;
    int  score[2];
};

//结构
struct MySecond {
    char title[10];
    char rest[20];
    float money;
};


struct MyThread {
    char *title;
    char *rest;
    float money;
};


#pragma mark - malloc free
struct namect {
    char *fname;
    char *lname;
    int letters;
};

void getinfo (struct namect *);



//实参为结构
void fW(struct MyFirstStu a[])
{
    struct MyFirstStu b = {"Zhao",'m',85,90};
    a[1] = b;
    puts(a[0].name);
    puts(a[1].name);

}

void mallFree();

//返回结构数组,函数
struct MyFirstStu getInfo();

int main(int argc, const char * argv[])
{
    
    mallFree();
    
    return 0;
    
    //1、结构数组初始化
    struct MyFirstStu c[2] = {{"Q",'T',{232,90}},{"Zhao",'k',{853,96}}};
    //结构传参
    fW(c);
    
    
    struct MySecond sec;
    sec.title[0] = '3';
    gets(sec.title);
    puts(sec.title);

    
    //2、结构指针,相同结构间指向
    struct MySecond *him;
    him = &sec;  //him 指针所指向的地址
    //him 是指针地址,所以赋值是是寻址 * 或者 ->
    him->title[0] = 's';
    (*him).title[1] = 'k';
    
    struct MyFirstStu *him2;
    him2 = &c[0];
    
    
    //3、相同结构直接赋值给结构
    struct MyFirstStu firStu;
    firStu = c[0];
    
    
    //4 注意:结构成员是 char 指针存放字符串,书上说会有潜在风险;结构成员如果用来存放字符串应该用字符数组 char []
    //char 指针应该用来存放已经在其它地方开辟空间的字符串变量
    struct MyThread tread = {"dsfsdfa","dfsdaf",11.4f};  //不建议
    
    char temp[80];
    gets(temp);
    struct MyThread *tread2;
    tread2->title = (char*) malloc(strlen (temp)+1);
    //字符串拷贝
    strcpy(tread2->title, temp);
    //直接赋值
    tread2->title = temp;
    free(tread2->title);
    
    return 0;
}

void mallFree()
{
    
    struct namect person;
    getinfo(&person);
    makeinfo(&person);
    showinfo(&person);
    cleanup(&person);

}


void getinfo (struct namect *pstt)
{
    struct namect aa;
    
    struct namect *pst = &aa;
    
    char temp[81];
    gets(temp);
    //分配用来存放名字的内存
    pst->fname = (char*)malloc(strlen(temp)+1);
    //把名字复制到已分配的内存中
    strcpy(pst->fname, temp);
    
    gets(temp);
    pst->lname = (char*)malloc(strlen(temp)+1);
    strcpy(pst->lname, temp);
    
    free(pst->fname);
    free(pst->lname);
    
}



typedef 结构体

//一、加了 typedef 的结构
typedef struct name {
    int a;
    float b;
}Namea;  //代表 name结构,初始化时候不需要在前面 加 struct

//一使用
    struct name nameS = {3,99.4f};
    Namea aaa = {1,3.22f};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值