您的位置:首页 > 编程语言 > C语言/C++

C语言结构体(struct)理解

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

一、结构体的定义:

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:结构体的声明也要注意位置的,作用域不一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: