指向结构体类型的指针数组做函数参数
2015-09-13 19:32
477 查看
结构体类型指针做函数参数(C++)
设有学生情况登记表如图所示,用选择排序法对该表按从小到大进行排序。学生情况登记表
学号num | 姓名name[8] | 性别sex | 年龄age | 成绩score |
101 | zhang | m | 19 | 95.6 |
102 | zhao | m | 20 | 89.0 |
103 | wang | f | 18 | 96.5 |
104 | shan | m | 20 | 94.0 |
105 | chen | f | 20 | 76.5 |
106 | han | f | 19 | 87.0 |
107 | cui | m | 20 | 78.8 |
108 | ding | f | 18 | 98.4 |
109 | chu | m | 19 | 90.0 |
110 | gao | m | 20 | 97.3 |
#include<iostream>
#include<iomanip>
using namespace std;
struct STUDENT
{
int num;
char name[8];
char sex;
int age;
double score;
};
void sort(STUDENT *p[],int n)
{
int i,j,k;
struct STUDENT *w;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if((*p[j]).score<(*p[k]).score)
k=j;
if(k!=i)
{
w=p[i];
p[i]=p[k];
p[k]=w;
}
}
return;
}
int main()
{
int i;
STUDENT stu[10]={{101,"zhang",'m',19,95.6},
{102,"zhao",'m',20,89.0},{103,"wang",'f',18,96.5},
{104,"shan",'m',20,94.0},{105,"chen",'f',20,76.5},
{106,"han",'f',19,87.0},{107,"cui",'m',20,78.8},
{108,"ding",'f',18,98.4},{109,"chu",'m',19,90.0},
{110,"gao",'m',20,97.3}};
struct STUDENT *p[10];
for(i=0;i<10;i++)
p[i]=&stu[i];
cout<<"NO. NAME SEX AGE SCORE\n";
cout<<setiosflags(ios::fixed);//浮点数以十进制小数形式输出
cout<<setiosflags(ios::left); //输出数据左对齐
cout<<setprecision(2); //小数点后两位
for(i=0;i<10;i++)
{
cout<<setw(8)<<(*p[i]).num<<setw(9)<<(*p[i]).name;
cout<<setw(8)<<(*p[i]).sex<<setw(8)<<(*p[i]).age;
cout<<setw(5)<<(*p[i]).score<<endl;
}
cout<<endl;
sort(p,10);
cout<<"NO. NAME SEX AGE SCORE\n";
for(i=0;i<10;i++)
{
cout<<setw(8)<<(*p[i]).num<<setw(9)<<(*p[i]).name;
cout<<setw(8)<<(*p[i]).sex<<setw(8)<<(*p[i]).age;
cout<<setw(5)<<(*p[i]).score<<endl;
}
return 0;
}
编程心得:
在本程序中,将学生信息定义为结构体类型变量,在函数的调用时,用结构体类型指针变量做函数参数,由于传送的是地址,因此,被调函数中改变结构体类型形参所指向的地址中的值也就改变了结构体类型指针实参所指向地址的值,即学生的排序得以改变。本例中,选择排序法也得到了重要的应用。
C/C++语言中,当数组作为函数的参数时,该参数退化为指针。因此下面二者相同:
C/C++ code
?
解决方案有二:
1、增加第二个参数size_t length,把长度传入第二个参数中。该方法适合C,对于C++则不是很推荐。
2、放弃普通数组,使用vector。函数的参数改成vector &。该方法适用于C++,但无法在C中使用。
利用函数模板:
C/C++ code
?
相关文章推荐
- Objective-C - protocol学习笔记
- 网易游戏2016校园招聘数据挖掘研究员在线笔试题和答案
- HDU 5438 Ponds
- [转]Android x86模拟器Intel Atom x86 System Image配置与使用方法
- java代码
- WIX
- 【Python基础】Python面向对象 - 9 - 类属性,实例属性
- 提高系统性能数据库设计的横向分割和纵向分割技术 .
- Python之sys模块小探
- Minimum Inversion Number 1394 (逆序对 归并排序) 好题
- django学习之models2
- 单向链表简单实现
- Android:30分钟弄明白Touch事件分发机制
- 查看某个文件的git 历史和更改
- 破解android手机付费软件视频教程
- 《舌尖上的中国》精彩故事
- 分享一个Linux下安装ASM+ORACLE的自动化脚本(三)
- quotation & citation
- Python类的专用方法
- CCF-2015-9-13-04