C++中结构体的的慨念和使用方法

什么是结构体?

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

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

C++ 代码
struct test
{
 float a;
 int b;
};

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

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

test pn1;

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

pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作,

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

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

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

 C++ 代码


//程序作者:管宁
//所有稿件均有版权,如要转载,请务必注明出处和作者

#include<iostream>
#include<string>
usingnamespacestd;

structtest//定义一个名为test的结构体
{
 inta;//定义结构体成员a
 intb;//定义结构体成员b
};

voidmain()
{
 testpn1;//定义结构体变量pn1
 testpn2;//定义结构体变量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();
}

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

时间: 2024-08-02 15:51:34

C++中结构体的的慨念和使用方法的相关文章

struct-C语言中结构体中的数组,不能直接赋值吗

问题描述 C语言中结构体中的数组,不能直接赋值吗 设有定义:struct{char mark[12];intnum1;double num2;}t1,t2;若变量均已正确赋初值,则以下语句中错误的是(C) (A) t1=t2; (B) t2.num1=t1.num1; (C) t2.mark=t1.mark;//mark为结构体中的数组,不能直接赋值?? (D) t2.num2=t1.num2; ?====如题参考答案说为结构体中的数组,不能直接赋值,为什么呢?那应该怎么赋值呢?求大侠指教 解决

c#中结构体数据读写问题

问题描述 c#中结构体数据读写问题 做了个界面要显示的内容很多数据都是通过接口通讯发来如果不使用数据库把所有变量读到内存中用struct结构体建立个缓冲区接口数据进来,修改结构体中变量显示时从结构体中读取不知道可行么? 解决方案 C++中结构体数据的文件读写

struct-关于c中结构体的变量的问题

问题描述 关于c中结构体的变量的问题 在学习c的socket的时候 看到了 struct sockaddr_in servaddr,clieaddr; //定义了2个结构体变量 之后bind 的时候 if(bind(sockfd,(struct sockaddr *)&servaddr,len)<0) { printf("bind errorn"); return -2; } 这里的bind函数的servaddr 小括号里面的结构体变量为什么不是 sockaddr_in

计蒜客 C语言 泥塑课中结构体的使用时,typedef使用与否的区别

问题描述 计蒜客 C语言 泥塑课中结构体的使用时,typedef使用与否的区别 代码一: #include typedef struct student{ int l; int w; int h; int v; char name[9]; }stu[10]; void func(int n){ int i, ave = 0, robber, victim; for(i = 0; i < n; i ++){ scanf("%d %d %d %s", &stu[i].l, &

C语言中结构体struct编写的一些要点解析_C 语言

一.关于结构体的声明1.匿名声明.如: struct { int i,j; }point; 说明: 这段代码的含义是,声明一个无名(anonymous)的结构体,并创建了一个结构体变量point.如果这段声明是放在全局域(在任意函数(比如main函数)外)内,那么point内的变量将被初始化为默认值,换句话说,以这种方式声明结构体变量时就已经为它分配了内存空间. 适用于该结构体只需要产生一个变量!本例中,该匿名结构体将有且仅有point这个结构体变量! 不同的匿名结构体变量,类型是不同的!如 s

C语言中结构体(struct)的几种初始化方法_C 语言

本文给大家总结的struct数据有3种初始化方法      1.顺序      2.C风格的乱序      3.C++风格的乱序 下面通过示例代码详细介绍这三种初始化方法. 1)顺序 这种方法很常见,在一般的介绍C的书中都有介绍.顺序初始化的特点是: 按照成员定义的顺序,从前到后逐个初始化:允许只初始化部分成员:在被初始化的成员之前,不能有未初始化的成员. 示例: struct User oneUser = {10, "Lucy", "/home/Lucy"}; 2

C与C++中结构体的区别_C 语言

C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. C++中的结构体和类的异同: 一.相同之处:结构体中可以包含函数:也可以定义public.private.protected数据成员:定义了结构体之后,可以用结构体名来创建对象.但C中的结构体不允许有函数:也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数. 二.不同之处:结构体定义中默认情况下的成员是

c语言中结构体对齐详解

为什么要对齐?     现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐.     对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同.一些平台对某些特定类型的数据只能从某些特定地址开始存取.比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保

C++中结构体的类型定义和初始化以及变量引用_C 语言

C++结构体类型的定义和初始化 有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用.这些组合在一个整体中的数据是互相联系的.例如,一个学生的学号.姓名.性别.年龄.成绩.家庭地址等项,都是这个学生的属性,见图 可以看到学号(num).姓名(name).性别(sex).年龄(age).成绩(score ).地址(addr)是与姓名为"Li Fun"的学生有关的.如果在程序中将num,name,sex,age,score,addr分别定义为互相独立的变量,就难以反映出它们之间