首页 技术 正文
技术 2022年11月6日
0 收藏 337 点赞 559 浏览 2815 个字

本文转载于 http://pcedu.pconline.com.cn/empolder/gj/c/0503/567930_all.html#content_page_1

所有程序经过本人验证,部分程序经过修改: 验证平台 w530 ,ubuntu 12.10_x64, ecplise 4.3(with CDT)

 

1. 定义:构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,

2. 与数组不同的两点

  • 结构体可以在一个结构中声明不同的数据类型,
  • 相同结构的结构体变量是可以相互赋值的,(而数组是做不到的因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称 是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。)

3. 定义结构体使用struct修饰符

struct test { float a; int b; }; 

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

4. 如何定义结构体变量:和定义普通变量的方法一样

例如

test pn1;

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

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

5. 如何定义结构体指针:结构指针通过->符号来访问成员

 

#include <iostream> #include <string>
using namespace std; struct test//定义一个名为test的结构体
{ int a;//定义结构体成员a
int b;//定义结构体成员b
}; int main() //在新的c++ 标准中,要使用 int main() 和 return 0
{ test pn1;//定义结构体变量pn1
test pn2;//定义结构体变量pn2
pn2.a=;//通过成员操作符.给结构体变量pn2中的成员a赋值
pn2.b=;//通过成员操作符.给结构体变量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=;//通过结构指针修改结构体变量pn2成员a的值
cout<<pn2.a<<"|"<<pn2.b<<endl; cout<<point->a<<"|"<<point->b<<endl;return ; }

显示结果:

|
|
|
|
|
  • 结构体变量是如何作为函数参数进行传递
#include <iostream> #include <string>
using namespace std; struct test { char name[]; float socre; }; void print_score(test pn)//以结构变量进行传递
{ cout<<pn.name<<"|"<<pn.socre<<endl; } void print_score(test *pn)//一结构指针作为形参
{ cout<<pn->name<<"|"<<pn->socre<<endl; } int main() { test a[]={{"marry",88.5},{"jarck",98.5}}; int num = sizeof(a)/sizeof(test); for(int i=;i<num;i++) { print_score(a[i]); } for(int i=;i<num;i++) { print_score(&a[i]); } return ; }

显示结果

marry|88.5 jarck|98.5 marry|88.5 jarck|98.5

注意:void print_score(test *pn)的效率是要高过void print_score(test pn)的,因为直接内存操作避免了栈空间开辟结构变量空间需求,节省内存。

  • 传递结构的引用
#include <iostream> #include <string>
using namespace std; struct test { char name[]; float socre; };// 注意这要有;号void print_score(test &pn)//以结构变量进行传递
{ cout<<pn.name<<"|"<<pn.socre<<endl; } int main() { test a[]={{"marry",88.5},{"jarck",98.5}}; int num = sizeof(a)/sizeof(test); for(int i=;i<num;i++) { print_score(a[i]); } return ; }

显示结果

marry|88.5 jarck|98.5

6. 上面我们说明了易用引用对结构体进行操作的优势,下面我们重点对比两个例程,进一部分析关于效率的问题。

例程1 例程2
#include <iostream> #include <string>using namespace std; struct test { char name[]; float socre; }; void print_score(test &pn) { cout<<pn.name<<"|"<<pn.socre<<endl; } test get_score() { test pn; cin>>pn.name>>pn.socre; return pn; } int main() { test a[]; int num = sizeof(a)/sizeof(test); for(int i=;i<num;i++) { a[i]=get_score(); } for(int i=;i<num;i++) { print_score(a[i]); } return ; }

 

#include <iostream> #include <string>
using namespace std; struct test { char name[]; float socre; }; void print_score(test &pn) { cout<<pn.name<<"|"<<pn.socre<<endl; } void get_score(test &pn) { cin>>pn.name>>pn.socre; } int main() { test a[]; int num = sizeof(a)/sizeof(test); for(int i=;i<num;i++) { get_score(a[i]); } for(int i=;i<num;i++) { print_score(a[i]); } return ; }

 

下一篇: date用法
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905