⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pointer_struct.cpp

📁 其他人不需帐号就可自由下载此个C或Java源
💻 CPP
字号:
#include "stdafx.h"
#include <stdio.h> 
#include <string.h>
/***************************************

	C 语言中的结构体,类似Java中的类 。

****************************************/


/**************** 
	结构体(structure):
	C语言允许一个组合项中包含若干个类型不同的数据项,称为结构体 。
*/


/****************
 声  明:
       struct 结构体名
         {
			成员列表
			
		 }[变量名列表];
		 // 成员列表也可以是一个结构体变量,即结构体可以嵌套结构体 。
*/


/**************** 
 定义结构体类型的变量:
 struct student student1,student2;
*/

/**************** 
 内存分配:
 在定义了结构体变量后,系统会为之分配内存单元,其大小为各个成员列表所占据的内存空间之和 。编译时只对变量分配空间,对类型是不分配空间的。
*/

 
/**************** 
   对结构体变量的访问(引用):
   结构体变量名.成员名
   1:不能将一个结构体变量进行整体输入输出,只能对分别对各个成员进行输入和输出  	
   2:如果成员本身又是一个结构体类型,则要用若干个成员运算符,一级一级的找到最低一级的成员,只能对最低级(基本数据类型)的成员赋值、运算、存取。
   student1.birthday.year 
   其中“birthday”为嵌套在 student结构体内的结构体,student1 为结构体student类型的一个变量 。
*/

/****************
	结构体数组:
	类似 基本类型所对应的数组 ,如整形数组,其数组中各个元素在内存中联系存放 。
	其初始化原则和基本类型数组初始化一样,初始化完一个元素再进行下一个元素的初始化。
*/

/****************
   “.” 号优先级高于“++”运算,所以 
   “leader[i].count++” 等价于“(leader[i].count)++”
   
   “.” 号优先级高于“*”运算,所以 (*p).no
   
    “->” 号优先级高于“++”
*/



/****************
	一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值就是结构体变量的起始地址 。指针变量也可以用来指向结构体数组中的元素 。
		

*/


  
/* 结构体类型定义*/
 
struct studentinfo
{
	int no;        //学号
	char name[15]; //姓名
	float score[3];  //三门课程的成绩
	float avr;    //平均成绩
};

typedef studentinfo STUDENT;

// struct studentinfo stu[50]; // 定义结构体数组
STUDENT stu[50]; // 定义结构体数组

/******* 指向结构体数组的指针*******/

void structArrayPointer()
{
	/* 基本数据类型定义 */
    int count=0;  
    char ch='y';
    
    struct studentinfo studentinput();// 先声明
    
	while ((ch=='y') || (ch=='Y'))
    {
		stu[count]=studentinput(); // 后使用
        count++;
		printf("\n 是否继续?(y or n)");
		scanf(" %c",&ch);
    }   
    
    struct studentinfo *p; // 声明
    p = stu; // 初始化等于结构体数组的首地址
    void displayStudent(struct studentinfo stud[],int count); // 声明	
    // 指向结构体变量的指针作为函数的参数
    displayStudent(stu, count); // 方式一
	// displayStudent(p, count);
}

/******* 指向结构体变量的指针作为函数的参数 *******/
void displayStudent(struct studentinfo stud[],int count)// 显示学生成绩
{	 
    printf("\n学号\t姓名\t\t平均成绩");
	printf("\n");
    for(int i=0;i<count;i++)
    {
		printf("%d",stud[i].no);
		printf("\t%s",stud[i].name);
		printf("\t%5.2f",stud[i].avr);
		printf("\n");
    } 
    printf("\n");
}

/*********** 结构体与输入输出  ********************/
struct studentinfo studentinput() 
{
    struct studentinfo studn;
    int j;
	int sum = 0;
    printf("\n学号:");
    scanf("%d",&studn.no); // 访问结构体变量中的成员
    printf("\n姓名:");
    scanf("%s",studn.name);
    printf("\n三门成绩:");     
    printf("\n");
    for(j=0;j<3;j++)
    {
		printf("成绩%d: ",j+1);
		scanf("%f",&studn.score[j]);		
		sum = sum + studn.score[j];
    }
	
    studn.avr = (float)sum/(float)3;	
    return studn;
}

void structTest()
{	 
	void structArrayPointer(); // 声明
	structArrayPointer(); // 指向结构体数组的指针
}



























 	 	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -