黑马程序员——C语言基础——结构体

本文深入探讨了Java中结构体的概念、定义、初始化、赋值、数组、指针、嵌套等核心内容,详细解释了如何在实际编程中灵活运用结构体,包括其在数组、指针操作和嵌套结构体的应用。

  ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

      结构体属于构造类型
     结构体由多个不同类型组合成
     数组由多个相同类型的数据构成
     结构体类型作用域:从定义类型的那一行开始,一直熬代码块结束
     结构体类型是本身是不存在的需要手动创建
1,定义结构体类型
     定义结构体时并不会分配存储空间
   struct Person
        {
             int age;
             double height;
             char *name;
         } 

2, 根据结构体类型定义结构体变量
struct Person p = {20,1.55,"jack"};
只能在定义结构体变量时一次性赋值或者使用p.age的方式赋值
这将20赋值给age,1.55赋值给height,jack赋值给name
 或者使用变量名称.属性的方法赋值
p.age = 30;//将30赋值给age
p.name = "jack";//将'jack'赋值给name
p.height = 1.55;//将1.55赋值给height
注意点:
结构体的名称最好有意义;
如果有两个结构体变量p1,p2;  如果执行p1 = p2;会将p2的所有成员的值对应的赋值给p1的所有成员

补齐算法:结构体所占用的存储空间,必须是最大成员字节数的倍数

结构体的其他用法:
定义类型同时定义结构体变量
    struct Person
        {//定义Person的三个属性
            int age;
            double height;
            char *name;
         } p1;
        
注意:结构体类型不能重复定义

结构体数组:
结构体数组的初始化和数组的初始化一样,如果想改变数组里的内容不能直接用:
例如:
struct Record{   
    int no;   
    charchar *name;  
    int score;   
};   
 struct Record rank[3]=  
{  
     {1,"jake",500},  
     {2,"rose",300},  
     {3,"jim",100}  
};  
错误写法:
rank[0] = {4,"whb",900};  
  
//正确写法  
rank[0] .no=4;  
rank[0] .name="whb";  
rank[0] .sroce=900;


结构体指针:
     1,指向结构体的指针的定义
     2,利用指针访问结构体的成员
     
     例如:
int main()
{
struct Student
{
     int no;
     int age;
 }
 //结构体变量
 struct Student stu = {1,20};
//指针变量p将来只想struct Student类型的数据
struct Student *p;
//指针变量p指向了stu变量
p = &stu;
有三种方式可以访问stu里面存储的数据
//第一种方式
printf("age = %d,no = %d\n",stu.age,stu.no);
//第二种方式
printf("age = %d,no = %d\n",(*p).age,(*p).no);
//第三种方式
printf("age = %d,no = %d\n",p -> age , p ->no);


结构体的嵌套:
概念:在结构体中调用结构体
注意:结构体的嵌套不能自己包含自己
例如:
  int main()
     {
          struct Date //定义结构体Date
          {
               int year;
               int month;
               int day;
          }
          struct Student//定义结构体Student
          {
               int no;
               
               struct Date birtDay;
               struct Date rDay;
          }
          struct Student p = {1,{2000,9,10},{2012,9,10}};
          printf("year = %d,month=%d,day= %d\n",stu.birtDay.year,stu.birtDay.month,stu.birtDay.day);
          return 0;
     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值