C/C++中的结构体

什么是结构体?

简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。

定义结构体使用struct修饰符,例如:

struct test
{
float a;
int b;
};

上面的代码就定义了一个名为test的结构体,它的数据类型就是test,它包含两个成员a和b,成员a的数据类型为浮点型,成员b的数据类型为整型。

由于结构体本身就是自定义的数据类型,定义结构体变量的方法和定义普通变量的方法一样。

test pn1;

这样就定义了一test结构体数据类型的结构体变量pn1,结构体成员的访问通过点操作符进行,pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作。

注意:结构体生命的时候本身不占用任何内存空间,只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存。

结构体,同样是可以定义指针的,那么结构体指针就叫做结构指针。

结构指针通过->符号来访问成员,下面我们就以上所说的看一个完整的例子:

#include <iostream>#include <string>using namespace std;struct test//定义一个名为test的结构体{    int a;//定义结构体成员a    int b;//定义结构体成员b};void main(){    test pn1;//定义结构体变量pn1    test pn2;//定义结构体变量pn2    pn2.a=10;//通过成员操作符.给结构体变量pn2中的成员a赋值    pn2.b=3;//通过成员操作符.给结构体变量pn2中的成员b赋值    pn1=pn2;//把pn2中所有的成员值复制给具有相同结构的结构体变量pn1    cout<<pn1.a<<"|"<<pn1.b<<endl;    cout<<pn2.a<<"|"<<pn2.b<<endl;    test *point;//定义结构指针    point=&pn2;//指针指向结构体变量pn2的内存地址    cout<<pn2.a<<"|"<<pn2.b<<endl;    point->a=99;//通过结构指针修改结构体变量pn2成员a的值    cout<<pn2.a<<"|"<<pn2.b<<endl;    cout<<point->a<<"|"<<point->b<<endl;    cin.get();}

总之,结构体可以描述数组不能够清晰描述的结构,它具有数组所不具备的一些功能特性。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 结构体
, 结构体指针
, 结构
, 变量
, pn532
, 数据类型
, 结构体数组
, 结构体 指针
, 结构体定义
, 结构体 指针 数组
, 自定义结构体
, 结构体 赋值 初始化
成员
c语言中结构体的使用、c语言中的结构体、c中结构体和类的区别、c 类中定义结构体、c语言中结构体的定义,以便于您获取更多的相关知识。

时间: 2024-09-21 03:16:10

C/C++中的结构体的相关文章

c-C 语言中返回结构体指针,结果出来了,但是还是出现错误,不知道为什么

问题描述 C 语言中返回结构体指针,结果出来了,但是还是出现错误,不知道为什么 解决方案 p 没有初始化,也就是没有分配空间.典型的指针错误,不初始化,指针指向哪里呢? 解决方案二: array *p = new array(); 解决方案三: array p;test(&p); 解决方案四: 当然,使用指针应该首先初始化一个空地址的,否则,很容易发生指针地址错误其次,看了一下你的程序设计,程序本身是定义了一个array的结构体变量,在主函数中却要申请一个指针变量p(它的类型是结构体),一系列操

OC中的结构体变量和结构体指针变量的区别

问题描述 OC中的结构体变量和结构体指针变量的区别 OC中的结构体变量和结构体指针变量的区别?,请写出相同点和不同点 解决方案 指向结构体变量的指针指向结构体变量的指针引用结构体变量中的成员结构体中的指针变量输出 解决方案二: 一般来说结构变量定义的时候就分配了内存空间;但结构体指针,和其它指针一样,只有4个字节的指针大小,在使用时需要先动态的分配内存.

C中的结构体对齐可以把下一个的类型补到前一个???

问题描述 C中的结构体对齐可以把下一个的类型补到前一个??? 解决方案 结构体对齐说的是编译器的事情,不是你定义一个字段然后自己去凑.千万不要从百度百科这种垃圾网站获得信息. 解决方案二: 同一类型的可以合并,很正常, 从对齐看,对其对齐要求是一样的,不冲突 实际上 char,char ,short 也可以合并成 一个int 当 char 8Bits,short16Bits,int32bits 的时候 只有当下个数据, 不在对齐位置的时候, 才会在两个数据中间插入间隙.

c-如何正确的导出动态库中的结构体变量

问题描述 如何正确的导出动态库中的结构体变量 使用开源库封装的dll,它里面的接口需要使用dll中定义的结构体变量作为参数,于是把该变量也一起导出了,但在使用时,对该变量取地址总返回未知的值.大概的代码如下: 头文件定义结构体A,并声明 a变量,另外有一个函数func struct A{}; extern const A a; int func(const A* p ); const A* return_a(); DLL中的 xxx.c文件中定义了a变量和func函数 const A a; in

c++-请问在C++中,结构体数组类型能作为类的数据成员吗?

问题描述 请问在C++中,结构体数组类型能作为类的数据成员吗? 我想让自己构造一个结构体数组来存储记录,结构体数组类型能作为类的数据成员吗? 解决方案 just do it 解决方案二: 可以.实现的时候注意不要出错就可以. 解决方案三: 可以,c++中结构体和类除了默认访问控制符外没什么区别,一个类的对象可以作为另外一个类的成员数据,结构体当然可以 解决方案四: 可以啊,结构体不过是扩展了的int float等等 解决方案五: 当然可以不过我觉得你还不如重新写个class作为专门存储数据 解决

c++-时间片轮转调度算法中C++结构体指针空值问题

问题描述 时间片轮转调度算法中C++结构体指针空值问题 // 时间片轮转调度算法.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include using namespace std; int ArrivalTime[100]; //进程到达时间 int ServiceTime[100]; //进程服务时间 int

c++-C++中的结构体如何删除

问题描述 C++中的结构体如何删除 在头文件定义了一个结构体 struct Node {int num: char name: Node *p } 如果创建了这样一个结构体 n1,那如何删除这个n1? 解决方案 怎么建的怎么删除呗 malloc对应free new对应delete 解决方案二: 对怎么创建怎么删除,malloc与free对应,new与delete对应.不能混用 解决方案三: 如果你没有用new或者malloc创建这个结构体的对象,那么内存在栈上,不用删除.

读取PLC中的结构体时,总是提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏

问题描述 读取PLC中的结构体时,总是提示:尝试读取或写入受保护的内存.这通常指示其他内存已损坏,但是,我把string[]改成char[]时,可以读到300个单字符,是数据类型的问题么?usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Wi

c++-Visual Basic 6.0 读取一个C++编写的DLL中的结构体函数

问题描述 Visual Basic 6.0 读取一个C++编写的DLL中的结构体函数 Visual Basic 6.0 读取一个C++编写的DLL中的结构体函数,几个函数公用一个内存有没有问题?需要复制内存么? 解决方案 http://blog.itpub.net/102086/viewspace-792251/