首页 > 其他分享 >C语言-04

C语言-04

时间:2023-07-12 23:23:02浏览次数:30  
标签:name 04 int age C语言 stu 类型 struct

自定义数据类型——初识

/*
    引入:
        学生:姓名,学号,年龄,成绩
        请为学生们专门定制一个类型(创造一个类型)


    结构体格式:
        struct 标识符    // 标识符即自定义类型的名称
        {
            成员;    // 自己设置
        };    // 这里要注意不要漏了分号


    struct Students        // 定义一个学生类型
    {
        char name[12];
        int id;
        int age;
        int score;
    };


    我们知道:

        类型    变量名;
        int          x;
           x = 10;        // 赋值操作
        ---初始化操作 int y = 10;



    那么同理:

        结构化类型        结构体变量名;
      struct Students        stu_1;
        stu_1 = {"张三", 52, 18, 616};    // 为4个成员初始化

        其他内容补充:
            1.访问结构体变量的成员
                stu_1.name;
                stu_1.id;
                stu_1.age;
                stu_1.score;

            2.成员赋值
                stu_1.name = "张三";    // 操作错误!!
                正确操作为:
                    1.引入头文件<string.h>
                    2.strcpy(stu_1.name, "张三")    // 作用:将后面字符串"复制到"前面


                stu_1.id = 52;    // 操作正确
                stu_1.age = 18;    // 操作正确
                stu_1.score = 616;    // 操作正确

*/


# include <stdio.h>
# include <string.h>

// 定义一个学生类型,类似于创造int、long...这些类型,只不过学生类型是自定义罢了
struct Students
{
    char name[12];
    int id;
    int age;
    int score;
};

int main()
{
    struct Students    stu_1;
    stu_1.age = 18;
    strcpy(stu_1.name, "张三");
    printf("%s, %d\n", stu_1.name, stu_1.age);

    struct Students    stu_2 = { "李四", 39, 17, 553 };
    printf("%s, %d\n", stu_2.name, stu_2.age);
}

自定义类型——给类型取别名

# include <stdio.h>

struct Human    // 定义一个 (struct)Human 类型
{
    char name[12];
    int age;
};

int main()
{
    typedef int Myint;    // 将int类型“取别名”为 Myint
    int x = 1;
    Myint y = 1;
    printf("%d\n", x + y);

    typedef struct Human hm;    // 将 struct Human 类型取别名hm
    hm obj_1 = { "tomato", 18 };
    printf("%s %d \n", obj_1.name, obj_1.age);

    return 0;
}
/*
    补充:
        在定义一个自定义类型的时候
        往往直接当场取别名,而不是以后才取
    e.g.
        struct Human    // 定义一个 (struct)Human 类型
        {
            char name[12];
            int age;
        }typedef hm;    // 直接当场取别名为hm
*/

自定义类型——结构体数组

# include <stdio.h>

// 定义一个类型
struct Hero
{
    char name[12];
    int level;
}typedef hr;    // 取别名

int main()
{ 
    // 初始化
    hr hero_1 = { "钢铁侠", 8 };
    hr hero_2 = { "蜘蛛侠", 7 };

    // 初始化
    hr hero_arr[9] = {    
        { "惊奇队长", 10 },
        { "美国队长", 7 },
        { "雷神", 8 },
        { "绿巨人", 9 },
        // 剩下的使用默认
    };

    // 修改
    hero_arr[0] = hero_1;

    return 0;
}

自定义类型——联合类型

/*
    union语法形式如下所示:

        union 名字    // union 关键字是用来定义"联合类型"
        {
            成员;    // 见详情
        }


        详情:
            修改一个成员的值,所有成员的值都会相应的产生变化
            原因:所有成员,内存是相同的(---如何理解?)
        ---如何理解?
            如下面代码中,num、d、ch 并不是各自独立占据一块内存,
            而是先看谁最大,因为 double 占8个字节,比 int 占的4个字节
            和 char 占的1个字节都要大,即 double > int > char
            所以,所有的成员,即整体一共被分配了8个字节
            因此,不同成员之间会出现联合占据某块内存空间的情况
            而在本例中,double 占了8/8,int 占了4/8,char 占了1/8
*/

# include <stdio.h>

union HUMAN
{
    int num;
    double d;
    char ch;
}typedef hm;    // 取别名

int main()
{ 
    hm u_1;
    u_1.num = 66;
    u_1.d = 10.0;
    u_1.ch = 'A';

    return 0;
}

自定义类型——枚举

 

标签:name,04,int,age,C语言,stu,类型,struct
From: https://www.cnblogs.com/seventy/p/c-04.html

相关文章

  • c语言学习4
    一、数组什么是数组:变量的组合,是一种批量定义相同类型变量的方式定义:类型名数组名[数量];intarr[5];注意:数组的长度一旦确定,无法改变使用:数组名[下标];下标:从0开始,范围:0~数量-1遍历:把数组的数据从头到尾显示或访问一般与for循环配合,把循环变量i当做数组下标初始化:类......
  • 04-非连续内存分配
    04-非连续内存分配为什么需要非连续内存分配连续内存分配的缺点1)分配给一个程序的物理内存是连续的2)内存利用率较低3)有外碎片、内碎片的问题非连续内存分配的优点一个程序的物理地址空间是非连续的更好的内存利用和管理允许共享代码与数据(共享库)支持动态加载和动态链接......
  • 用c语言写一个计算自己活了多少天的代码
    #include<stdio.h>//初始化数组保存天数inta[12]={31,28,31,30,31,30,31,31,30,31,30,31};//普通年intb[12]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年//判断闰年intLeap(intyear){if((year%4==0&&year%100!=0)||(year%400==0)){return1;......
  • C语言(四)
    目录9.结构体9.1引入9.2语法9.3位域与柔性数组9.3.1位域9.3.2柔性数组10.联合体11.枚举12.typedef关键字12.1typedef和struct12.2typedef和函数指针12.3typedef与#define的区别13.C程序组成13.1.c文件的组成13.1.1头文件包含13.1.2宏定义13.1.3声明13.1.4条件编译13.2.h文......
  • C语言库函数
    C语言库函数1.stdio库1.1printf函数printf格式化输出符:inta=3;floatb=3.14;doublec=5.2;chars1[6]={'h','e','l','l','o','\0'};char*s2="world";printf("%d%f%f\n",......
  • 【题解】CF gym 104337 G. Guess the Polynomial
    statement:https://codeforces.com/gym/104337/problem/G。即求\(f(x)=\sum\limits_{i=0}^{p-2}a_ix^i\),其中只有不超过\(n\)个\(a_i\)非\(0\)。记:\[\begin{aligned}A_{n}^{k}&=\sum_{i\equivk\pmod{n}}a_i=\frac{1}{n}\sum_{i=0}^{n-1}f(\omega_{n}^{......
  • ubuntu22.04安装vsftp遇到的问题
    问题FileZilla连接文件服务器时出现”无法读取文件目录“,随后出现“20秒后无活动,连接超时”、“无法连接到服务器”文件目录无法读取的问题。该问题的出现是因为防火墙关闭导致数据包无法通过,进而无法显示文件目录。解决办法:1、开启服务器防火墙sudoufwallow20:21/tcpsu......
  • C语言-00
    初识C语言//单行注释/*多行注释1.语言发展历程二进制的指令-->汇编指令-->B语言-->C语言(高级语言)2.C语言国际标准:ANSIC---美国国家标准化组织CC89C90C99C11...3.C语言是一门编译型语言,而Pytho......
  • 关于C语言中的《scanf》和《printf》函数的返回值
    一,scanfC语言中的scanf函数的返回值类型是int,表示你正确输入参数的个数代码如下:#include<stdio.h>intmain(){ inta=0; intb=0; intnum=scanf("%d%d",&a,&b); printf("num=%d\n",num); return0;}一,printfC语言中的printf函数的返回值类型是int,表......
  • C/C++2022级C语言课程设计任务书[2023-07-06]
    C/C++2022级C语言课程设计任务书[2023-07-06]2022级C语言课程设计任务书【题目1】学籍管理系统一、设计题目学籍管理系统(用动态结构体数组实现)二、设计内容【题目描述】假设某校学生学籍基本信息主要包括:学号(整型)、姓名(字符数组型)、所在系、班级等,本系统应能对这些......