C 语言结构体

//  main.m

#import <Foundation/Foundation.h>

//struct{
//    char name[20];
//    int age;
//
//}stu={"葫芦娃",18};
//

int main(int argc, const char * argv[]) {

   /***

    结构体的 成员变量可以是不同的数据类型,例如(int   char,,,
    )
     数组是由相同类型的元素构成的

    结构体
    命名:  标示符 (struct)结构体名{
                       //成员变量
                        类型说明符 变量名;(  变量名  变量名的命名规范)
                         .....

                              };

    ***/
    //定义一个存储点信息的结构体
//     typedef  struct mypoint
//    {
//        int x;
//        int y;
//
//    }point;
//    point a={1,2};

//    //定义一个存储矩形信息的结构体
//    struct juxing{
//
//        int chang;
//        int kuan;
//
//    };
//    //定义存储人特征的结构体
//    struct persen{
//
//
//        char name[20];
//        int age;
//        int bobby[20];
//        int sex;
//
//    };
//    //定义一个汽车结构体
//    //定义一个汽车人的结构体
//   typedef  struct car
//    {
//
//        int lunzi;
//        char  color[20];
//        char  pinpai[20];
//        int pailiang;
//
//    }ca;
//    ca che={4,"黄色","但凡",2};
//    printf("该车轮子%d个,颜色:%s,品牌:%s,排量%d\n",che.lunzi,che.color,che.pinpai,che.pailiang);
//    

//    //定义一个女朋友
//    struct Girlf
//    {
//        char name[20];
//        int  age;
//        float height;
//        float weight;
//        char sex;
//
//
//    };
//    //结构体变量是由结构体类型修饰的变量叫做结构体变量
//    //格式:
//    // struct  结构体名 变量名={  初值  };
//    //1.他可以直接给我们结构体内的成员变量进行赋值,注意,赋值是和我们结构体内部成员变量是一一对应的;
//    struct Girlf gf={"赛貂蝉",30,1.20,250.00,‘m‘};
//    printf("我的女朋友叫:%s,今年:%d岁,身高:%.2f米,体重:%.2f,最可怕的他还是个%c的",gf.name,gf.age,gf.height,gf.weight,gf.sex);
//    //这里的点语法和我们oc中学习的语法很相似,都是通过我们的对像(也就是变量名)对其内部的属性进行一一对应的,
//    //赋值
//   // gf.name="小白",//字符串不可以直接赋值,想要进行赋值,我们需要使用 strcpy()
//
//    strcpy(gf.name, "二狗蛋");
//
//    printf("我的女朋友叫:%s,今年:%d岁,身高:%.2f米,体重:%.2f,最可怕的他还是个%c的",gf.name,gf.age,gf.height,gf.weight,gf.sex);
//    

//
//   typedef struct teacher {
//
//        char name[20];
//        int age;
//        int gonghao;
//
//    }tea;
//    tea mathteacher={"龚杰",30,16010157};
//    printf("我是数学老师是:%s ,年龄%d ,工号:%d ",mathteacher.name,mathteacher.age,mathteacher.gonghao);
//    

//
//    struct dog{
//
//        char name[20];
//        char color[20];
//
//    };
//    struct dog g={"放的","黄色"};
//    printf("我的狗狗:%s,颜色:%s",g.name,g.color);
//    

    //匿名结构体
//    struct{
//        char name[20];
//        int age;
//
//    }stu={"葫芦娃",18};
//    stu.age=20;
//    printf("%d",stu.age);
//    

//    stu.age=20;
//    

    //结构体内部计算
//    struct student{
//
//        int age;
//        char sex;
//        double height;
//        int weight;
//
//    }stu;
//    printf("%lu",sizeof(stu));

//    struct student{
//
//        int a;
//        char d[20];
//        double b;
//        float c;
//
//    }stu;
//    printf("%lu",sizeof(stu));

    //Typedef
    //为我们现有的结构体 另起一个新的名字,用新起得名字 代替我们能原有的结构体
    //语法:typedef 原类型名  新类型名
    //下方的typedef int  ZX代表的是 给我们int 类型起了一个新的名字 叫  ZX   ZX代表的是 int

    //结构体可以直接赋值,但是数组不可以直接赋值,要是想直接进行赋值,我们可以把数组放在结构体当中进行直接赋值

//    typedef int  ZX;
//    typedef float fd;
//
//    ZX num=9;
//    ZX num1=12;
//    fd num2=12.3;
//
//    struct student{
//
//        char name[20];
//
//    };
//    struct student stu1={"二傻子"};
//
//    //使用 typedef
//    typedef struct Student student;
//    student stu2={"二愣子"};
//    

//    typedef struct personer
//    {
//
//        char name[20];
//        int age;
//
//    }person;
//
//    person p1={"小丽",22};
//

    //有三个学生,编程找出分数最高以及年龄最小者
//    typedef struct student{
//        int num;
//        char name[20];
//        int age;
//
//    }stu;
//    stu s1={89,"小红",18};
//    stu s2={90,"小绿",20};
//    stu s3={78,"小黄",15};
//    //定义接收分数最高
//    stu s4={0};
//    stu temp1;
//    stu temp;
//    //定义接收年龄最小的
//    stu s5={0};
//    s4=s1.num>s2.num?s1:s2;
//    s4=s4.num>s3.num?s4:s3;
//    printf("分数最高的:%d,%s,%d\n",s4.num,s4.name,s4.age);
//    s5=s1.age<s2.age?s1:s2;
//    s5=s5.age<s3.age?s5:s3;
//    printf("年龄最小:%d,%s,%d\n",s5.num,s5.name,s5.age);
//
//    //成绩降序
//    stu s6[]={89,"小红",18,90,"小绿",20,78,"小黄",15};
//    for (int i=0; i<2;i++ ) {
//        for (int j=0; j<2-i; j++) {
//            if (s6[j].num<s6[j+1].num) {
//                temp=s6[j];
//                s6[j]=s6[j+1];
//                s6[j+1]=temp;
//            }
//        }
//    }for (int i=0; i<3; i++) {
//        printf("%d,%s,%d\n",s6[i].num,s6[i].name,s6[i].age);
//    }
//    printf("\n");
//    //年龄升序
//
//    stu s7[]={89,"小红",18,90,"小绿",20,78,"小黄",15};
//    for (int i=0; i<2;i++ ) {
//        for (int j=0; j<2-i; j++) {
//            if (s7[j].age>s7[j+1].age) {
//                temp1=s7[j];
//                s7[j]=s7[j+1];
//                s7[j+1]=temp1;
//            }
//        }
//    }for (int i=0; i<3; i++) {
//        printf("%d,%s,%d\n",s7[i].num,s7[i].name,s7[i].age);
//    }
//    printf("\n");

    //编程找出下列四人中成绩最高者,并按照姓名进行冒泡排序(升序)并打印出全部信息
//    typedef struct person{
//
//        char name[20];
//        int num;
//        char hoobby[20];
//        int age;
//    }per;
//    per per1={"zrt",60,"ritian",18};
//    per per2={"ylc",70,"nvren",20};
//    per per3={"hlw",80,"yeye",7};
//    per per4={"fj",30,"sg",24};
//
//    per per5={0};
//    per per6[]={per1,per2,per3,per4};
//    per temp;
//     per5=per1.num>per2.num?per1:per2;
//     per5=per5.num>per3.num?per5:per3;
//     per5=per5.num>per4.num?per5:per4;
//
//
//    printf("成绩最高的%s,%d,%s,%d\n",per5.name,per5.num,per5.hoobby,per5.age);
//
//    //strcmp(<#const char *#>, <#const char *#>)
//    for (int i=0; i<3; i++) {
//        for (int j=0; j<3-i; j++) {
//            if (strcmp(per6[j].name, per6[j+1].name)>0) {
//                temp=per6[j];
//                per6[j]=per6[j+1];
//                per6[j+1]=temp;
//            }
//        }
//    }for (int i=0; i<4; i++) {
//        printf("按照姓名排序:姓名%s,成绩%d,爱好%s,年龄%d\n",per6[i].name,per6[i].num,per6[i].hoobby,per6[i].age);
//    }

    //结构体嵌套  结构体的成员为结构体
//    typedef struct Date{
//
//        int year;
//        int month;
//        int day;
//
//    }MyDate;
//    typedef struct person
//    {
//        char name[20];
//        int age;
//        MyDate birthday;
//
//    }per;
//    per per1={"丑葫芦",18,{1997,12,20}};
//    printf("姓名%s,今年%d,出生日期%d年%d月%d日",per1.name,per1.age,per1.birthday.year,per1.birthday.month,per1.birthday.day);
//    

    typedef struct person{

        char name [20];
        int age;
        int num;
        char b[20]

    }per;
    per p1={"小丽",18,34,"吃饭"};
    per p2={"??黄",19,56,"睡觉"};
    per p3={"小白",3,78,"干"};

    per p4[3]={p1,p2,p3};
    //通过对应的下标找到对应的结构体然后我们使用点(.)语法点出我们想要的属性(实例变量)
    printf("今年%d岁\n",p4[0].num);
    printf("我是最吊的,我叫%s\n",p4[2].name);

        return 0;
}
时间: 2024-10-13 01:46:20

C 语言结构体的相关文章

C语言 结构体指针赋值 incompatible types when assigning to type &#39;char[20]&#39; from type &#39;char *&#39;

strcpy(pstudent->name, "guo zhao wei "); 为什么错误,该怎么写,(红色行) 追问 为什么不能直接赋值啊, 追答 用char nnnn[20]定义的,用strcpy 用char *ppp定义的,用=来赋值 C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'

漫谈C语言结构体struct、公用体union空间占用

先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; union union_data1{ short a;//本身占用2个字节 char b[13];//本身占用13个字节 int c ;//本身占用4个字节 }; struct struct_data{ int a ;//int本身占用4个字节,偏移量为0 char b ;//char本身占用1个字节,偏移量为

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用 传值 把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象 传引用 真正的以地址的方式传递参数 传递以后,行参和实参都是同一个对象,只是他们名字不同而已 对行参的修改将影响实参的值 所谓变量是内存地址的一个抽象名字,在静态编译的程序中,所有变量名都会在编译时转换成内存地址,机器不知道变量名,只知道地址. C 语

C语言结构体(struct)常见使用方法(转)

本文转自 CSDN huqinweI987 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 [cpp] view plaincopy struct stuff{ char job[20]; int age; float height; }; 第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义 [cpp] view plaincopy

C语言结构体赋初值

C语言结构体赋初值,特别是结构体中含有数组成员是,最后一个逗号最好是不要多写.因为有些时候可能会出错.图中,红色的框框处.

读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组

原文链接:C语言结构体里的成员数组和指针 复制如下: 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如下.我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章. 为了方便你把代码copy过去编译和调试,我把代码列在下面: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h>

c 语言 结构体

结构体初学者都有点小怕其实思维清晰之后你会发现结构体是个非常好的东西,嘿嘿. 第一,结构体的定义和初始化.别被书上大量的描述吓到 1.怎么定义结构体了例子如下,我们以构建一个包含学生姓名,年龄,Email为例子 1 struct 2 { 3 char name; 4 int age; 5 char Email; 6 }person; 现在我们定义就已经完成了,当然这是我最喜欢的范式,你们也可以在书上找到自己喜欢的. 2.怎么初始化了?结构体一般初始化都是以结构体数组的形式来的所以我们只说这个 t

C语言结构体的初始化

今天在工作时,看到了奇葩的结构体初始化方式,于是我查了一下C99标准文档和gcc的说明文档,终于搞清楚是怎么回事了. 假设有如下结构体定义: typedef struct { int a, b, c; } MyStruct; 那么结构体的初始化方式如下有三种: (1) C89的初始化方式 MyStruct test = {1, 2, 3}; 这种初始化的优点是语法简单,无需输入变量名:缺点是成员变量的初始化顺序必须与声明的一致,无法乱序初始化. (2) C99新增的初始化方式 MyStruct

不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 共用体 枚举 类型定义符 示例cStruct.h #ifndef _MYHEAD_STRUCT_ #define _MYHEAD_STRUCT_ #ifdef __cplusplus extern "C" #endif char *demo_cStruct(); #endif cStruct.c /* * 结构体,共用体,枚举,类型定义符 * * 注:结构体变量在做参数传递时,其内每个

C语言结构体声明中冒号的使用(占位符) &amp; C结构体的乱序初始化

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为"位域"或"位段".所谓"位域"是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数.每个域有一个域名,允许在程序中按域名进行操作.这样就可以把几个不同的对象用一个字节的二进制位域来表示.一.位 域的定义和位域变量的说明位域定义与