C++结构体的定义、初始化和引用
定义:
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。
声明一个结构体类型的形式是:
struct Student{      //声明一个结构体类型Student
	int num;         //声明一个整形变量num
	char name[20];   //声明一个字符型数组name
	char sex;        //声明一个字符型变量sex
	int age;         //声明一个整形变量age
	float score;     //声明一个单精度型变量
	char addr[30];   //声明一个字符型数组addr
}
结构体类型变量的定义方法及初始化
定义结构体变量的方法:
(1)先声明结构体类型在定义变量名
#include<iostream>
using namespace std;
int main(){
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
};
Student student1,student2;// 定义结构体类型变量student1和student2
cout<<sizeof(Student)<<endl;
cout<<sizeof(student1)<<endl;
cout<<sizeof(student2)<<endl;
return 0;
}
在定义了结构体变量之后,系统会为之分配内存单元。(可以用sizeof函数查看分配的字节数,不同的编译系统存在差异)
(2)在声明类型的同时定义变量
#include<iostream>
using namespace std;
int main(){
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
}student1,student2;//声明变量student1和student2
cout<<sizeof(Student)<<endl;
cout<<sizeof(student1)<<endl;
cout<<sizeof(student2)<<endl;
return 0;
}
(3)直接定义结构体类型变量
#include<iostream>
using namespace std;
int main(){
struct { //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
}student1,student2;//声明变量student1和student2
cout<<sizeof(student1)<<endl;
cout<<sizeof(student2)<<endl;
return 0;
}
这种定义方法虽然合法,但是不常用。比较常用的是第一种方法。
关于结构体的类型要注意的几点:
(1)类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。
(2)对结构体变量中的成员(即“ 域”),可以单独使用,它的作用与地位相当于同类型的普通变量。
域”),可以单独使用,它的作用与地位相当于同类型的普通变量。
(3)结构体的成员也可以是一个结构体变量。
#include<iostream>
using namespace std;
struct Date{ //声明一个结构体类型Date
int month; //日期中的月份
int day; //日期中的天
int year; //日期中的年份
};
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
Date birthday; //Date是结构体类型,birthday是Date的类型的变量
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
};
int main(){
Student qianshou;
Date riqi;
cout<<sizeof(riqi)<<endl;
cout<<sizeof(qianshou)<<endl;
return 0;
}
(5)结构体中的成员名可以与程序中的变量名相同,但二者没有关系。
例如,程序中可以另定义一个整形变量,他与student中的num是两回事,互不影响。
2 结构体变量的初始化
(1)在定义结构体时对结构体变量指定初始值
	struct Student{      //声明一个结构体类型Student
		int num;         //声明一个整形变量num
		char name[20];   //声明一个字符型数组name
		char sex;        //声明一个字符型变量sex
		int age;         //声明一个整形变量age
		float score;     //声明一个单精度型变量
	    char addr[30];   //声明一个字符型数组addr
       } student1={
             10001,
            "qianshou",
             'm',
             19,
             "100",
             "JiNan"
       };
(2)在定义变量时进行初始化(这种方法更常用)
	struct Student{      //声明一个结构体类型Student
		int num;         //声明一个整形变量num
		char name[20];   //声明一个字符型数组name
		char sex;        //声明一个字符型变量sex
		int age;         //声明一个整形变量age
		float score;     //声明一个单精度型变量
	    char addr[30];   //声明一个字符型数组addr
   };
    Student student1={
	       10001,
	       "qianshou",
	       'm',
	       19,
	       "100",
	       "JiNan"
	   };
结构体变量的引用
在定义了结构体变量之后,就可以引用这个变量。
(1)引用结构体变量中的一个成员的值
引用方式:结构体变量名.成员名
其中“.”是成员运算符,它在所有的运算符中优先级最高。
#include<iostream>
using namespace std;
struct Date{ //声明一个结构体类型Date
int month; //日期中的月份
int day; //日期中的天
int year; //日期中的年份
};
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
Date birthday; //Date是结构体类型,birthday是Date的类型的变量
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
};
int main(){
Student one={001,"qianshou",'m',19,10,1,1993,100,"JiNan"};
cout<<one.num<<endl;
cout<<one.name<<endl;
cout<<one.sex<<endl;
cout<<one.age<<endl;
cout<<one.birthday.month<<"/"<<one.birthday.day<<"/"<<one.birthday.year<<endl;
cout<<one.score<<endl;
cout<<one.addr<<endl;
return 0;
}
如果一个成员本社也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。
例如:
cout<<one.birthday.month<<"/"<<one.birthday.day<<"/"<<one.birthday.year<<endl;
(2)可以将一个结构体变量的值付给另外一个具有形同机构的结构体变量。
#include<iostream>
using namespace std;
struct Date{ //声明一个结构体类型Date
int month; //日期中的月份
int day; //日期中的天
int year; //日期中的年份
};
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
Date birthday; //Date是结构体类型,birthday是Date的类型的变量
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
};
int main(){
Student two={1,"qianshou",'m',19,10,01,1993,100,"JiNan"};
Student one=two;
cout<<one.num<<endl;
cout<<one.name<<endl;
cout<<one.sex<<endl;
cout<<one.age<<endl;
cout<<one.birthday.month<<"/"<<one.birthday.day<<"/"<<one.birthday.year<<endl;
cout<<one.score<<endl;
cout<<one.addr<<endl;
return 0;
}
(3)可以引用结构体变量的地址,也可以引用结构体变量成员的地址。
#include<iostream>
using namespace std;
struct Date{ //声明一个结构体类型Date
int month; //日期中的月份
int day; //日期中的天
int year; //日期中的年份
};
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
Date birthday; //Date是结构体类型,birthday是Date的类型的变量
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
};
int main(){
Student two={1,"qianshou",'m',19,10,01,1993,100,"JiNan"};
Student &one=two;
one.num++;
one.birthday.day+=10;
cout<<two.num<<endl;
cout<<two.name<<endl;
cout<<two.sex<<endl;
cout<<two.age<<endl;
cout<<two.birthday.month<<"/"<<two.birthday.day<<"/"<<two.birthday.year<<endl;
cout<<two.score<<endl;
cout<<two.addr<<endl;
return 0;
}
一个小实例:
#include<iostream>
using namespace std;
struct Date{ //声明一个结构体类型Date
int month; //日期中的月份
int day; //日期中的天
int year; //日期中的年份
};
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex[5]; //声明一个字符型变量sex
int age; //声明一个整形变量age
Date birthday; //Date是结构体类型,birthday是Date的类型的变量
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
};
int main(){
Student one;
//输入信息
cout<<"请输入学号:";
cin>>one.num;
cout<<"请输入姓名:";
cin>>one.name;
cout<<"请输入性别:";
cin>>one.sex;
cout<<"请输入年龄:";
cin>>one.age;
cout<<"请输入生日的年 月 日:";
cin>>one.birthday.year;
cin>>one.birthday.month;
cin>>one.birthday.day;
cout<<"请输入你的成绩:";
cin>>one.score;
cout<<"请输入地址:";
cin>>one.addr;
//输出信息
cout<<"\n以下是你的信息\n";
cout<<"学号:"<<one.num<<endl;
cout<<"姓名:"<<one.name<<endl;
cout<<"性别:"<<one.sex<<endl;
cout<<"年龄:"<<one.age<<endl;
cout<<"生日:"<<one.birthday.year<<"/"<<one.birthday.month<<"/"<<one.birthday.day<<endl;
cout<<"成绩:"<<one.score<<endl;
cout<<"地址:"<<one.addr<<endl;
return 0;
}
C++结构体的定义、初始化和引用的更多相关文章
- c语言中结构体的定义、初始化及内存分配
		#include <stdio.h> struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数 ... 
- C++结构体成员列表初始化
		C++关于struct和class的区别,可以看上一篇文章:c ++ class和struct[转] 结构体成员列表初始化,来个例子: #include <iostream> #inclu ... 
- c语言结构体指针必须初始化
		先说结论 结构体指针需要初始化 结构体指针的成员指针同样需要初始化 结构体变量定义的时候就已经分配了内存空间,而上面两个确没有 struct test{ int i; struct buf *p;} ... 
- go语言基础之结构体普通变量初始化
		1.结构体 1.1.结构体类型 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性.显然单独定义以上变量比较繁琐,数据不便于管理. 结构体是一种聚合的数 ... 
- 结构体类型定义(C语言)
		结构体的定义形式如下: struct 结构体名 { 结构体成员 }: 结构体变量的定义方式有三种:1.先定义结构体,再定义变量: eg. struct student{ char name[10]; ... 
- C /C ++中结构体的定义
		c语言中结构体的定义: struct 结构体名{ 成员列表: ..... }结构体变量: 7.1.1 结构体类型变量的定义结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问 ... 
- NoSQL的CURD结构体的定义
		NoSQL的CURD结构体的定义 flyfish 2015-7-23 參考MongoDB Wire Protocol 在这里document部分使用json表示 使用boost::property_ ... 
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法
		一.关于全局变量的定义.声明.引用: (只要是在.h文件中定义的变量,然后在main.c中包含该.h文件,那么定义的变量就可以在main函数中作为全局变量使用) 方法1: 在某个c文件里定义全局变量后 ... 
- keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法
		以前写单片机程序时总是把所用函数和变量都写在一个c文件里,后来遇到大点的项目,程序动则几千行,这种方式无疑会带来N多麻烦,相信大家都有所体验吧! 后来学会了在keil里进行模块化编程,即只把功能相同或 ... 
随机推荐
- The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server,错误: 15128)
			记录下 The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Micr ... 
- deep learning (六)logistic(逻辑斯蒂)回归中L2范数的应用
			zaish上一节讲了线性回归中L2范数的应用,这里继续logistic回归L2范数的应用. 先说一下问题:有一堆二维数据点,这些点的标记有的是1,有的是0.我们的任务就是制作一个分界面区分出来这些点. ... 
- Spring_学习_00_资源帖
			一.官方文档 1.Spring Framework Documentation 二.参考书籍 1.< Spring实战 (第四版)> 三.参考资料 
- 【转】JVM虚拟性能分析
			JDK自带的JAVA性能分析工具.它已经在你的JDK bin目录里了,只要你使用的是JDK1.6 Update7之后的版本.点击一下jvisualvm.exe图标它就可以运行了. 这里是VisualV ... 
- python数据类型,int,str,bool
			一,python中的int() int在python中主要用来运算,对字符串的转化,用int(str)表示,并且需要str.isdigit为真. 在int()中二进制的转换如下: #bit_lengt ... 
- docker 摆渡镜像脚本
			#!/bin/bash if [ $# != 1 ];then echo "Param error";exit; fi DOCKER_NAME=$1 IMAGE_TAG=${DOC ... 
- linux环境下搭建redis
			1. 官网下载安装包,然后解压,或者直接从github上pull下来. git clone https://github.com/antirez/redis.git 2. 确保linux环境上已安装g ... 
- 基于TCP协议 I/O多路转接(select) 的高性能回显服务器客户端模型
			服务端代码: myselect.c #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> ... 
- QtCreator开启-O编译优化的方式
			首先,编译优化必须是在Release模式下进行,保证程序没有任何bug的条件下进行执行.编译优化能极大提升程序的运行效率,级别越高速度越快,但是对代码健壮性要求也越高! 选择编译release模式,在 ... 
- webrtc doubango linphone
			1.doubango官网:http://www.doubango.org/ 2.doubango是一个开源的VOIP基础平台, 并能用于嵌入式和桌面系统的开源框架,该框架使用ANSCI-C编写,具有很 ... 
