为了有好看的字体改变了格式……
结构体
在c++中结构体的定义及声明格式如下:
struct 结构体名
{
数据类型 成员名1;
数据类型 成员名2;
.
.
.
数据类型 成员名n;
};
下面是一个结构体定义的实例:
struct student{
int num;
char name[10];
int age;
float score;
char addr[30];
}
c++中的结构体类似于Java中的类,所以上面的代码只是指定了一个结构体类型,它相当于一个模型,其中并无具体数据,系统对之也不分配实际内存单元。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。可以采取以下三种方法定义结构体类型变量:
1.先声明结构体类型,后定义结构体变量。例如:
struct student student1,student2;
2.定义结构体类型的同时定义结构体变量。
struct student{
int num;
char name[10];
int age;
float score;
char addr[30];
}x,y;
3.定义无名称的结构体类型的同时定义结构体变量。
struct /*定义结构体类型,但省略了类型名*/
{
int num;
char name[10];
int age;
float score;
char addr[30];
}x,y;
不过使用这种方式,以后将无法使用这种结构体类型来定义其他变量。
结构体变量的初始化
结构体变量和其它变量一样,在定义结构体变量的同时进行初始化。例如:
#include<iostream>
using namespce std;
int main(){
struct student{
int num;
char name[10];
int age;
float score;
char addr[30];
}x={8001,"zhang qu",19,97.5,"shanghai"};
cout<<"NO:"<<x.num<<endl<<"Name:"<<x.name<<endl;
cout<<"Age:"<<x.age<<endl;
cout<<"Score:"<<x.score<<endl<<"Addr:"<<x.addr;
}
运行结果如下:
NO:8001
Name:zhang qu
Age:19
Score:97.5
Addr:shanghai
结构体数组
结构体数组的定义和一般的结构图变量定义相似,在声明结构体数组变量时,只要加上数组的方括号([])即可。例如:
struct student{
int num;
char name[20];
char sex;
float score[3];
}
struct student s[3]={{8001,"zhang qu",'m'{80,86,92}},
{8002,"wang hai",'m'{88,76,94}},
{8003,"wang yan",'f'{90,96,82}}};
结构体数组元素成员的引用格式如下:
结构体数组名[下标].成员名
结构体指针
一个结构体变量的指针就是该结构体变量所占据的内存段的起始地址。
指向结构体变量的指针定义的一般形式为
struct 类型名 *指针名;
例如:
struct data *p,data1;
p=&data1;
是指针p指向结构体变量data1.
通过指向结构体的指针引用结构体成员的表示方法为:
指针->结构体成员名
"*指针"表示指针所指对象,所以也可以用这种方式通过指向结构体的指针引用结构体成员:
(*指针).结构体成员名
这里圆括号是必须的,因为运算符" * "的优先级低于运算符" . "。
内存动态管理函数
1.malloc函数
其函数原型为
void *malloc(unsigned int size);
它的函数值为指针,即地址,这个指针是指向void类型的,也就是不规定指向任何具体的类型。
其作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是一个指向分配域起始地址的指针。
2.calloc函数
其函数原型为
void *calloc(unsigned int n;unsigned int size);
其作用是在内存的动态存储区中分配n个长度为size的连续空间。
3.free函数
其函数原型为
void free(void *p);
枚举类型
所谓枚举,是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。枚举类型定义的一般形式为:
enum 枚举类型名{标识符1,标识符2,……标识符n};
例如,定义一个枚举类型和枚举变量如下:
enum colorname{red,yellow,green,blue,black};
enum colorname color,color_1;
color=red;
color_1=blue;
当然也可以直接定义枚举变量,例如:
enum colorname{red,yellow,green,blue,black}color,color_1;
【说明】
1.枚举类型不是变量,不能改变其值。例如,下面的赋值是错误的:
red=0;
yellow=1;
当枚举类型它们是有值的,C语言编译按定义时的顺序使它们的值为0,1,2,……。这个值是可以输出的。
也可以像这样改变枚举元素的值,例如:
enum colorname{red=5,yellow=1,green,blue,black};
定义red为5,yellow为1,以后顺序加一,black为4.
2.枚举元素的值可以用来做判断比较。例如:
if(color==red)
if(color<yellow)
3.一个整数不能直接赋给一个枚举变量。因为它们属于不同的类型,应先进行强制类型转换才能赋值。例如:
color=(enum colorname)2;
用typedef定义
1.进行简单的名字替换
typedef int INTEGER;
typedef float REAL;
2.用一个类型名代替一个结构体类型
typedef struct{
int num;
char name[20];
float score;
}STUDENT;
此时STUDENT表示一个结构体类型的名字,可以用STUDENT来定义此结构体类型的变量。
3.进行数组类型定义
typedef int COUNT[20];
COUNT x,y;
此处定义了COUNT为整型数组类型,x、y为整型数组类型COUNT变量,且各有20个数组元素。
4.进行数组类型定义
typedef char *STRING;
STRING p1,p2,p[10];
愿所有预备程序员好好学习,天天向上!
相关推荐
用于在C++结构体和json/xml之间互相转换, bson在xbson中支持。 只需要头文件, 无需编译库文件。 具体可以参考example的例子
C++结构体参数与结构体指针参数区别Demo(资源包括C++源程序和编译好的exe文件)
C++结构体简单例子(资源包括C++源程序和编译好的exe文件)
在写C#TCP通信程序时,发送数据时,只能发送byte数组,处理起来比较麻烦不说,如果是和c++等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[]数组转换为一个结构体,而在C#却不能直接把...
c++结构体数组学生管理系统
代码说明: http://blog.csdn.net/catxl313/article/details/25434275
c、c++如果在日志中查看某个结构字段信息,只能通过printf逐个格式化,工作量大; 该dll库通知pdb文件分析结构体字段位置,并根据类型格式一个完整字符串,极大降低了开发者工作量。 1、可通过cdump\Release\...
c++ 结构体
(1)C/C++语言的结构体支持对其中的基本成员变量按位拆分; (2)拆分的位数应该是合乎逻辑的,应仍然可以组合为基本成员变量;
c/c++ 中如果要打印结构体,不需要再复杂的输入n行printf了,一行就搞定 char *pMsg = CLoadDumpDll::Dump("MyStruct",&my); 时间有限,目前还只是支持基本类型的打印,哪些类型,参考test .cpp。
把c++的结构体、数据类型、函数定义转换成对应的c#表达,很强大。
关于C/C++的结构体说明,一些常用的插入,删除方法
详细介绍了C++结构体的用法,一目了然,可供初学者参考学习。
它主要解决C++中类、结构体写ascii码文件时因结构体不同而不断重复写代码的问题。让应用跟专注于业务,而不必关心底层写文件的操作。提高代码的可读性,稳定性。 到CSDN我的博客中<C++ 结构体 写文件 STF架构>看...
C/C++中关于结构体的详细介绍,其中包括结构体作为函数体变量进行传递的相关介绍。
结构体 较简单 把复杂变简单 c++ 结构体与一般变量 C初学者
网络通信中C、C++结构体转C#结构体
C++结构体作为参数Demo(资源包括C++源代码和编译好的exe文件)
NULL 博文链接:https://zcw-java.iteye.com/blog/1902909
以下小编就为大家介绍一道超经典的关于C++结构体的题目。需要的朋友可以过来参考下