结构体类型指针做函数参数(C++)

简介: 因为用到了这块,所以转了一篇文章。 原文地址http://blog.sina.com.cn/s/blog_5f777ddd0100chbl.html 设有学生情况登记表如图所示,用选择排序法对该表按从小到大进行排序。

因为用到了这块,所以转了一篇文章。

原文地址http://blog.sina.com.cn/s/blog_5f777ddd0100chbl.html

设有学生情况登记表如图所示,用选择排序法对该表按从小到大进行排序。

                          学生情况登记表

 学号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;

}     

 

编程心得:

  在本程序中,将学生信息定义为结构体类型变量,在函数的调用时,用结构体类型指针变量做函数参数,由于传送的是地址,因此,被调函数中改变结构体类型形参所指向的地址中的值也就改变了结构体类型指针实参所指向地址的值,即学生的排序得以改变。本例中,选择排序法也得到了重要的应用。

目录
相关文章
|
8天前
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
8天前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
8天前
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。
|
25天前
利用指针函数
【10月更文挑战第2天】利用指针函数。
15 1
|
27天前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
24 1
|
27天前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
22 2
|
1月前
|
存储 编译器 程序员
C++类型参数化
【10月更文挑战第1天】在 C++ 中,模板是实现类型参数化的主要工具,用于编写能处理多种数据类型的代码。模板分为函数模板和类模板。函数模板以 `template` 关键字定义,允许使用任意类型参数 `T`,并在调用时自动推导具体类型。类模板则定义泛型类,如动态数组,可在实例化时指定具体类型。模板还支持特化,为特定类型提供定制实现。模板在编译时实例化,需放置在头文件中以确保编译器可见。
27 11
|
29天前
|
算法 搜索推荐 C语言
【C语言篇】深入理解指针4(模拟实现qsort函数)
【C语言篇】深入理解指针4(模拟实现qsort函数)
20 2
|
29天前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
1月前
|
存储 C++ 索引
C++函数指针详解
【10月更文挑战第3天】本文介绍了C++中的函数指针概念、定义与应用。函数指针是一种指向函数的特殊指针,其类型取决于函数的返回值与参数类型。定义函数指针需指定返回类型和参数列表,如 `int (*funcPtr)(int, int);`。通过赋值函数名给指针,即可调用该函数,支持两种调用格式:`(*funcPtr)(参数)` 和 `funcPtr(参数)`。函数指针还可作为参数传递给其他函数,增强程序灵活性。此外,也可创建函数指针数组,存储多个函数指针。