C语言结构体(struct)理解

本文介绍了C语言中的结构体,包括结构体的基本定义、结构体的定义方式(带初始化与不带初始化)、访问结构体元素的方法以及结构体指针的使用。强调了结构体不能嵌套自身,其大小由成员变量大小总和决定,并举例说明了结构体大小的计算。同时,文章指出C语言结构体与C++类的不同,如不能在结构体定义时初始化成员,并提醒读者注意结构体声明的作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本定义:结构体指的是一种数据结构,是聚合数据类型的一类,通俗讲就像是打包封装,把一些变量有共同特征(比如同属于某一类事物的属性)的变量封装在内部,通过一定方法访问修改内部变量。

一、结构体的定义:

1.简单的结构体定义

struct Student{  
        char name[20];  
        int age;  
        int number;  
}; 

2.附加变量初始化的结构体定义(为结构体定义一个别名)

struct Student{  
        char name[20];  
        int age;  
        int number;  
}Stu; 
这就跟下面这个是等效的:

struct Student{  
        char name[20];  
        int age;  
        int number;  
};  
struct Student Stu;

3.如果结构体只需要定义一个变量Stu,不需要再去定义第二个变量,那么可以简写:

struct {  
        char name[20];  
        int age;  
        int number;  
}Stu; 


注意:结构体内部的成员可以是任意类型的,但是不能嵌套自己!!比如说:

struct Student{  
        char name[20];  
        struct Student stu;//错误!不能嵌套自己!
}; 



二、结构体变量及其内部成员变量的定义及访问:

1.结构体的声明:

struct Student student;

2.结构体的成员变量的定义可以随声明进行:

struct Student student = {"zhangsan",15,0001};

3.结构体之间可以互相赋值:

struct Student stu = student;

4.单独为结构体的成员变量赋值:

stu.name[0]='z';
stu.name[1]='h';
.....
stu.age=15;
stu.number=001;


三、访问元素:

结构体中访问成员是通过变量名.成员名,如下所示

// 定义结构体类型  
struct Student{  
       int age;  
       int number;  
};  
// 定义结构体类型  
struct Student stu = {15,0001};   
// 获取stu这个变量的age值  
int num2 = stu.age;  

四、结构体指针:

1.结构体指针,定义结构体指针跟定义结构体变量一样,首先必须定义结构体类型,如下所示:

// 定义结构体类型  
struct Student{  
       int age;  
       int number;  
};  
// 定义结构体变量  
struct Student stu = {15,0001};  
// 定义结构体指针  
struct Student *p = &stu; 

2.同样的定义了结构体指针,访问结构体变量的成员又多了几种方法,如下所示:

/ 定义结构体类型  
    struct Student{  
        int age;  
        int number;  
    };  
    // 定义结构体变量  
    struct Student stu = {15,0001};  
    // 定义结构体指针  
    struct Student *p = &stu;  
    // 访问结构体变量的成员可以用stu.age,p->age,(*p).age  
    printf("%d==%d==%d\n", stu.age, p->age, (*p).age);



五、占用内存空间:

       struct结构体,在结构体定义的时候不能申请内存空间,不过如果是结构体变量,声明的时候就可以分配。

       结构体的大小是结构体所含变量大小的总和,并且不能用"char a[]"这种弹性(flexible)变量,必须明确大小,下面打印输出上述结构体的size:

 printf("size of struct Stu:%d\n",sizeof(struct Stu));  
        printf("size:%d\n",sizeof(student));  
结果都是28:分别是char数组20,int变量4*2. 

和C++的类不一样,结构体不可以给结构体内部变量初始化,。

如下,为错误示范:

#include<stdio.h>  
//直接带变量名student
struct Student{  
//      char name[20] = "zhangsan";    
//      int age = 15;  
//      int number = 0001;  
}student;

PS:结构体的声明也要注意位置的,作用域不一样。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值