C语言结构体(struct)理解
2015-09-01 19:53
302 查看
基本定义:结构体指的是一种数据结构,是聚合数据类型的一类,通俗讲就像是打包封装,把一些变量有共同特征(比如同属于某一类事物的属性)的变量封装在内部,通过一定方法访问修改内部变量。
一、结构体的定义:
1.简单的结构体定义
2.附加变量初始化的结构体定义(为结构体定义一个别名)
3.如果结构体只需要定义一个变量Stu,不需要再去定义第二个变量,那么可以简写:
注意:结构体内部的成员可以是任意类型的,但是不能嵌套自己!!比如说:
二、结构体变量及其内部成员变量的定义及访问:
1.结构体的声明:
2.结构体的成员变量的定义可以随声明进行:
3.结构体之间可以互相赋值:
4.单独为结构体的成员变量赋值:
三、访问元素:
结构体中访问成员是通过变量名.成员名,如下所示
四、结构体指针:
1.结构体指针,定义结构体指针跟定义结构体变量一样,首先必须定义结构体类型,如下所示:
2.同样的定义了结构体指针,访问结构体变量的成员又多了几种方法,如下所示:
五、占用内存空间:
struct结构体,在结构体定义的时候不能申请内存空间,不过如果是结构体变量,声明的时候就可以分配。
结构体的大小是结构体所含变量大小的总和,并且不能用"char a[]"这种弹性(flexible)变量,必须明确大小,下面打印输出上述结构体的size:
和C++的类不一样,结构体不可以给结构体内部变量初始化,。
如下,为错误示范:
PS:结构体的声明也要注意位置的,作用域不一样。
一、结构体的定义:
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:结构体的声明也要注意位置的,作用域不一样。
相关文章推荐
- c++输入输出流
- 条款01 视c++为一个语言联邦
- CRgn::CreateEllipticRgn
- VC6.0 C++ 如何调用微软windows系统SDK 语音API
- VC6.0 C++ 如何调用微软windows系统SDK 语音API
- c语言sizeof求结构体的大小
- CRgn::CreateEllipticRgnIn
- 期望时间为线性时间的选择算法(C++)
- C语言基础知识之(十九):内存操作的其他函数:内存初始化,内存拷贝,内存比较
- C语言基础知识之(十八):堆内存的分配函数及运用
- C语言基础知识之(十七):内存的分区:栈区,堆区,静态区(全局区),常量区,代码区
- Visual C++文件扩展名解读
- 【C++学习心得】第一部分:基本语言
- C++连接Mysql数据库
- C++标准库vector类型
- 论char数组在c++和java中的不同
- c语言中的“/”和“%”
- c++中的隐藏、重载、覆盖(重写)
- 打印一个集合的幂集C++实现
- C++版的坦克大战(1)---实现基本设计和j简单思想