C语言基础_结构体

一、结构体

1)声明
  struct 用来声明结构体
  作用:管理多个数据信息

struct student{
    int num;  //成员变量之间用;隔开
    int age;
    char name[30];
    float score;
}Student;//分号不要忘记

2) 初始化

  1、设置初始值使用{}
  2、按照成员变量的顺序赋值
  3、可以不设置信息,使用{0}

    Student stu1={1,18,"luofeng",90.0};
    Student stu2={2,81,"sunjude",99.9};
    Student stu3={0};

  4、相同结构体类型变量可以相互赋值[数组名是不可以的]

stu3 = stu1;

  5、结构体变量定义以后,不能整体赋值,只能给成员变量单独赋值

strcpy(stu2.name, "canglaoshi");printf("%d,%d,%s,%.2f",stu1.num,stu1.age,stu1.name,stu1.score);

3)typedef 原类型名 新类型名   

  1、 typedef struct student Animal; //结构体重命名

typedef float  ok;
int main(int argc, const char * argv[]) {
    ok a= 0.89;
    printf("%f\n",a);
    return 0;
}

4)局部变量

  1、在函数内定义,整个函数内有效

  2、作用域:在{}内有效,出了{}就被释放,不能再使用

  3、不同的函数中,可以定义相同的变量,每个函数都有自己的作用域

  4、在某代码段中定义,只能在代码段中使用,循环,分支

  5、在函数中定义了变量,然后再代码段中也定义了相同的变量[在代码段中,以代码段内的变量使用,在代码段外,以函数内的变量使用]

5)全局变量

  1、函数外定义,程序运行结束释放

  2、从全局变量定义的位置开始,下面的程序中都能使用全局变量

  3、全局变量和局部变量可以重命名

  4、设置初始值使用{}, 可以不设置信息,使用{0}

  5、按照成员变量的顺序赋值

6) 结构化数组

  1、数组的元素都是结构体类型

typedef struct student{
    char name[20];
    int score;
    int age;
}Student;
int main(int argc, const char * argv[]) {
Student stu[3]={{"dawang",90,38},{"xiaowang",100,28},{"wangzha",80,18}};
    Student max = {0};
    Student min = stu[0];
    for (int i= 0; i<3; i++) {
        if (max.score < stu[i].score) {
            max = stu[i];
        }
        if (min.score > stu[i].score) {
            min = stu[i];
        }
    }
     printf("%s %d %d\n",max.name,max.score,max.age);
     printf("%s %d %d\n",min.name,min.score,min.age);
return 0;
}

  2、按成绩排序

typedef struct student{
    char name[20];
    int score;
    int age;
}Student;
int main(int argc, const char * argv[]) {
Student stu[3]={{"dawang",90,38},{"xiaowang",100,28},{"wangzha",80,18}};
for (int i = 0; i < 2; i++) {
        for (int j =0 ; j<2-i; i++) {
            if (stu[j].score < stu[j+1].score) {
                Student temp = {0};
                temp = stu[j];
                stu[j] = stu[j+1];
                stu[j+1] = temp;
            }
        }    }
        for (int i= 0; i < 3; i++) {
            printf("%s %d %d\n",stu[i].name,stu[i].score,stu[i].age);
    }
return 0;
}

7) 结构体嵌套

typedef struct Date{
    int year;
    int month;
    int day;
}Date;
typedef struct student{
    char name[20];
    int score;
    int age;
    Date birthday;
}Student;

int main(int argc, const char * argv[]) {
 Student stu = {"zhangsan",88,23,{2003,11,11}};
    stu.birthday.year = 2012;
    printf("%d,%d,%d",stu.birthday.year,stu.birthday.month,stu.birthday.day);
return 0;
}

8)函数调用结构体

  1、.h里代码

typedef struct teacher{

    char name[30];
    int number;
    int age;

}Teacher;

void tiger(Teacher t1,Teacher t2);//形参声明结构体变量
void blog(Teacher tea[],int n);

  2、.m里代码

void tiger(Teacher t1,Teacher t2)
{
    Teacher max = t1.age > t2.age ? t1:t2;
    printf("%s %d %d\n",max.name,max.number,max.age);
}

void blog(Teacher tea[],int n)
{
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-1-i; j++) {
            if (tea[j].age< tea[j+1].age) {
                Teacher temp;
                temp = tea[j];
                tea[j] = tea[j+1];
                tea[j+1] = temp;

            }
        }
    }
    for (int i=0; i<n;i++) {
        printf("%s %d %d\n",tea[i].name,tea[i].number,tea[i].age);
    }
}

  3、main.m里代码

    Teacher tiger1 = {"haha",2,23};
    Teacher tiger2 = {"hehe",3,25};
    tiger(tiger1, tiger2);

    Teacher tea[]={{"dawang",90,38},{"xiaowang",100,28},{"wangzha",80,18}};
    blog(tea, 3);
时间: 2024-10-27 19:41:10

C语言基础_结构体的相关文章

Go语言基础之结构体

Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型.我们可以基于内置的基本类型定义,也可以通过struct定义.例如: //将MyInt定义为int类型 type MyInt int 通过Type关键字的定义,

9.Go语言基础之结构体

Go语言中没有类的概念,也不支持"类"的继承等面向对象的概念. Go语言中通过结构体的内嵌再配合接口,比面向对象具有更高的扩展性和灵活性. 1.类型别名和自定义类型 1.1自定义类型 在Go语言中有一些基本的数据类型,如string,整型,浮点型,布尔等数据类型,Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型.我们可以基于内置的基本类型定义,也可以通过struct定义. //将MyInt定义为int类型 type MyInt int 通过Type关

黑马程序员——c语言基础:结构体和枚举---typedef的使用

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.什么是结构体 当一个整体由多个数据构成时,我们可以用数组来表示这个整体,但是数组有个特点:内部的每一个元素都必须是相同类型的数据. 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高等数据构成,这些数 据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型. 为此,C语言专门提供了一种构造类型来解决上述问题,这就是结构体,它

黑马程序员— C语言基础之结构体、枚举、预处理、typedef的使用

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 本章我们主要来学习之前所学的复杂数据类型中的同样也很重要的结构体和枚举的知识,以及C语言中的预处理,typedef的使用,简单介绍一下static和extern等一些比较杂的知识.在开始本章的新知识学习之前首先我们来学习一下根据变量的作用域的不同C语言一般把变量分为两种,局部变量和全局变量.下面我们来分别比较和体会一下这两种不同的变量类型: 根据变量的作用域,可以分为: 1. 局部变量: a.

Golang基础之结构体

Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型.我们可以基于内置的基本类型定义,也可以通过struct定义.例如: // 将MyInt定义为int类型 type MyInt i

Demo_张仕传_结构体考试-modify

/* 题目: //声明一个结构体类型 struct _AdvTeacher { char *name; char *tile; int age; char *addr; char *p1; //系统预留成员域 char **p2;//系统预留成员域 }; 要求定义一个结构体数组(6个元素),要求从键盘输入数据,并按照名称大小进行排序:打印输出. 1. 打印结构体数组,需要单独封装成函数:10 2. 排序结构体数组,需要单独封装成函数(按照名称进行排序):50 3. main函数中编写业务测试模型

【Go】语法基础之结构体

结构体的定义很简单: type Vertex struct { X, Y float64 } 可以理解为多个变量的集合. 结构体的使用: 1.直接使用: v := Vertex{1, 2} 或 var v = Vertex{1, 2} 2.通过new关键字: v := new(Vertex) 3.通过指针访问: v := &Vertex{1, 2} 为结构体添加方法: package main import ( "fmt" "math" ) type Ver

关于c语言中的结构体使用偏移量求值问题

最近在看nginx源码,看到定时器的时候,发现一个结构体利用偏移量求值问题, 结构体相信做c开发的都遇到过,那么不知你对结构体中成员变量偏移这块是如何理解的; 首先我们先看一下nginx中的那个让我迷惑的地方 ev =    (event_t*)((char*)node - offsetof(event_t, timer)); 这里,可以得知道是利用event_t结构体的timer变量,来反求event_t结构体的地址 说明一下: event_t是一个结构体 node 也是一个结构体 timer

C语言中的结构体,结构体数组

C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存对齐的问题.也就是内存里面会有空档. 1.结构体的定义和赋值 结构体是可以直接初始化的,在定义的时候,就可以初始化,而且如果你的结构体中恰好有字符数组的话,这个时候初始化是不错的选择,原因很简单,字符数组只能定义的时候直接初始化 后来就不可以了,后来你就只能用strcpy函数来拷贝初始化了. str