结构体详解
结构体基本用法:
结构体就是把相同或者不同类型的便利放到一起,这和C++中的类很像,但没有c++那么复杂,C语言中的结构体申明如下:
struct student           //结构体名
{
    char   name[10];     //姓名
    int    number;       //编号
    int    grade;        //成绩
};
申明很简单,其内存是按顺序放置的。
下面需要注意的几点:
1.申明时不能初始化(为什么后面会讲)
2.申明只是申明一个结构体,是不能使用的
3.获取结构体大小可以用sizeof(struct student)
4.结构体可以嵌套定义
5.结构体大小必须是所有成员变量大小的整数倍
一般我们会使用新定义类型来代替结构体,其实就是给结构体起一个新的名字
typedef  struct student
{
     char     name[10];
     int      number;
     int      grade;
}STU;
STU stu1={"张三",001,95};//定义一个stu1结构体变量,并进行初始化
注意:只有在定义的时候才能一起初始化,一旦定义了之后,不能一起初始化,但是可以分别初始化,为啥之后不能初始化,主要原因是因为结构体变量是按顺序存储的。
这样STU表示的实际就是结构体,具体可以参考typedef用法。
结构体既然申明了那怎么使用了,这里我们必须定义一个结构体变量,注意是结构体变量,也就是定义一个变量,这里的变量的类型是结构体,因此结构体申明部分其实就是申明一个新的变量类型,因此结构体是一个类型,不是变量,所以这也就是为啥申明的时候里面不能进行初始化的原因。 下面举个例子来使用结构体:
我们引用结构体是可以这样引用:
stu1.name="李四";
stu1.number=002;
stu1.grade=100;
上面的引用方式是成员引用,也就是普通变量方式引用,还有一种引用就是结构体指针引用,这两种引用的方式有很大不同,后面会讲到。
指针引用时必须申明一个结构体指针,就像在整型变量中使用指针一样,我们需要先定义一个整型指针变量,然后使用它,这里也是一样。
STU  *stu2;   //定义一个stu2结构体指针变量
上面不能进行初始化,因为其实质是一个指针,不能像变量一样可以一起初始化(当然,指针实质还是变量,但是其使用不一样,所以一般说指针还是指指针变量)
既然是指针,那么必须指向一个内存地址,因此指针变量使用之前必须指向一块特定的内存地址,结构体指针也不例外。 那我们怎样初始化结构体指针呢
第一种方式用动态分配内存的方式:
stu2=(STU*)malloc(STU);
第二种方式使用结构体变量间接方式:
stu2=&stu1;
这样结构体stu2指向的就是stu1的首地址。
结构体高级用法:
在函数中,如果参数是结构体,那么又该怎样使用呢,其实我们使用结构体和使用变量是一样的,定义如下
void swap(STU stu1,STU stu2)
{
   int exchange=0;
   exchange = stu1.grade;
   stu1.grade=stu2.grade;
   stu2.grade=exchange;
   /******
    ......
   ******/
}
这样就可以使用结构体变量了,但是请思考下面代码结果:
STU stu3={"王五",003,80};
swap(stu1,stu3);
执行这个函数两个结构体中的grade会交换么? 结果是不会。 这里就和函数中讲解的是一样的,那么我们怎么才能将其交换呢,在普通函数中给的方法是使用指针,因此这里我们同样可以使用指针来操作,我们必须将函数的形参定义为结构体指针变量。 如下:
STU swap(STU *stu1,STU *stu2)
{
    int exchange=0;
    exchange = stu1->grade;
    stu1->grade=stu2->grade;
    stu2->grade=exchange;
}
这样我们使用
swap(&stu1,&stu3);
就可以将其调换位置了
- 
                                C语言
                                +关注关注 180文章 7604浏览量 136771
- 
                                C++
                                +关注关注 22文章 2108浏览量 73636
- 
                                变量
                                +关注关注 0文章 613浏览量 28365
- 
                                结构体
                                +关注关注 1文章 130浏览量 10841
发布评论请先 登录
相关推荐
C语言中结构体struct的用法
C语言结构体(struct)用法的详解
 
    
如何定义结构体?
请教下有没有好的用法可以将结构体和easyflash结合进行使用?
c语言_结构体和共同体
ADC0809用法详解_引脚图及功能_工作原理_内部结构及应用电路
 
    
C语言结构体(struct)用法详解
 
    
 
           
        
 
         结构体基本用法详解
结构体基本用法详解 
  
     
            
             
             
                 
             工商网监
工商网监
        
评论