• 《黑马程序员》 结构体struct (C语言)


    一、结构体的基本概念

    ●     数   组:只能由多个相同类型的数据组成

    ●     结构体:可以由多种不同类型的数据组成

    代码练习:

    #include <stdio.h>
    int main()
    {
    // 1.定义结构体类型 struct person (并不会分配存储空间)
    struct person { int age; double height; char *name; }; //2.根据结构体类型,定义结构体变量 (真正分配存储空间)
    struct person p ={20,1.55,"jack"}; p.age = 30; //修改结构体元素的值 p.name = "rose"; printf("age =%d,name = %s,height = %f ",p.age,p.height,p.name); return 0; }

     二、结构体的三种定义方式

    ●    先定义类型,再定义变量

    int main()
    {
        struct student
         {
               int age;
               double height;
               char *name;
         };
    
       struct student stu = {20,1.78,"jack"};
    
    }
    

     

    ●    定义类型的同时定义变量

    int main()
    {
       struct student 
        {
           int age;
           double height;
           char *name;
         }stu;
       struct student stu2;  
     }
    

    ●    定义类型的同时定义变量(省略了类型名称)

    int main()
    {
       struct {
                    int age;
                    char *name;
                 }stu;
    }
    

      

    三、结构体数组

    #include <stdio.h>
    //定义一个结构体数组,并且遍历结构体数组内各元素
    int main()
    {    
    	int i;
    	struct RankRecord                  //定义结构体数据类型
    	{
    	   int no;
    	   char *name;
    	   int score;
    	};
        struct  RankRecord record[3] =         //定义结构体变量
    	 {
    		 {1,"jack",5000},
    		 {2,"tom",3000},  
    		 {3,"jim",2000}
    	 };
    	 record[1].no = 5;                  //修改结构提内元素的赋值
    	 //record[1] = {5,"tom",3000};      错误写法
         for(i = 0;i <3;i++){
        printf("%d	%s	%d
    ",record[i]);
    	 }
    	return 0;
    }
    

      

     

    四、结构体的作用域

    1、定义在函数外部

    全局有效(从定义结构体类型的那行代码开始到文件结尾)

    2.定义在函数内部:

    局部有效(从定义结构体类型的那行代码开始到代码块结束)

    #include <stdio.h>
    void  test();
    int main()               
    {
        //struct person p;  报错,在test函数内部定义的结构体类型只能在test函数内部使用 
    rerurn 0; } void test() { struct person { int age; double height; }; }

     五、指向结构体的指针

    定义结构体指针

      结构体类型  *p;      例:struct person *p;

      p =&变量名;               p =&stu;

    #include <stdio.h>
    /*定义一个结构体变量,输出用指针指向该结构体的值,使用指针修改
         这个结构体内的元素   */
    int main()
    { 
    	struct person               //定义结构体类型 
    	{
    	  int age;
    	  int no;
    	};
    	struct person stu ={10,5};   //赋值
    	struct person *p;          
    	p = &stu;                   //指向了stu变量
    	//三种方法可实现修改结构体内元素的值
    	stu.age = 20;                
            (*p).age = 30;              //使用指针修改结构体内元素的值
    	p->age = 40;
    	//三种输出结构体内元素的值的方法
    	printf("%d	%d
    ",stu.age,stu.no);
    	printf("%d	%d
    ",(*p).age,(*p).no);
    	printf("%d	%d
    ",p->age,p->no);
    	return 0;
    }
    

     六、结构体的嵌套使用

    /*情景: 一个学生含有学号、生日(年月日)、入学时间(年月日)等很多时间的属性是可以将年月日抽取成一个结构体 
    并在这个学生内部定义不同的结构体变量*/
    #include <stdio.h>
    int main()
    {
    	struct Date         //抽取的日期结构体
    	{
    	   int year;
    	   int month;
    	   int day;	
    	};
    
    	struct Student              
    	{
    	  int no;
    	  struct Date birtuday;          //结构体的嵌套使用
    	  struct Date ruxue;
    	};
    	struct Student stu = {22,{1992,01,15},{1991,05,12}};
    	//输出生日
    	printf("year = %d,month = %d,day = %d
    ",stu.birtuday.year,stu.birtuday.month,stu.birtuday.day
    		);
    	return 0;
    }
    
  • 相关阅读:
    Cyber Security
    Cyber Security
    Cyber Security
    Cyber Security
    Balanced Number HDU
    Round Numbers POJ
    Bomb HDU
    不要62 HDU
    Making the Grade POJ
    You Are the One HDU
  • 原文地址:https://www.cnblogs.com/shtz/p/4423702.html
Copyright © 2020-2023  润新知