结构体

////////////////////////////////////////////////////////////////////////////////////////结构体部分一//////////////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
int main()
{ char arry[20]="傻逼"; //字符串的数组的赋值具有多种的方式
printf("输出数组字符串:%s ",arry);
//结构体的学习,此结构体有一点像类的学习 定义结构体的关键子是strcut()
struct Student //注意结构体的后面具有分号,重点,重点重点。
{ int score;
char name[20];
int ge;

}; //注意此处具有分号
/*
struct Student stu1={90,"张琪"}; //注意此处于C++中的区别,这里在进行初始化的时候采用的是大括号{}
//并且对象的初始化的时候具有等号:=
//注意在进行初始化的时候,大括号的的值,便是对结构体中的变量进行依次的赋值
//未进行赋值的变量是系统随机的。注意。

printf("输出学生的姓名:%s ",stu1.p);//采用点的形式进行调用
printf("输出学生的成绩:%d ",stu1.score);
printf("输出学生的个数:%d ",stu1.ge);
*/
// 进行分开赋值,不在对象的初始化的时候进行赋值
struct Student stu2;
stu2.score=98;
//stu2,name="小明"; 如果变量是一个数组便不能进行这样的赋值,如果是指针变量则可以这样进行赋值
//如果是数组采用一下形式及逆行赋值。
strcpy(stu2.name,"小明");//在c 中通常不采用这种形式
printf("输出学生的姓名:%s ",stu2.name);//采用点的形式进行调用
printf("输出学生的成绩:%d ",stu2.score);

return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////结构体部分2/////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
void detes(int date)
{
printf("打印传入的形式参数的值: %d ",date);

}
int main()
{
char *str;//注意此时定义的是野指针,再一次将其进行赋值将会出现错误
// str= "生活的孤独"; 通常这样会出现一些错误。正确的操作如下
str=(char *)malloc(128); //给指针变量进行空间的申请。
memset(str, '',128); //对指针变量进行初始化,1.被初始化的指针,2.用于初始化指针的字符 3.初始化的大小
// str="社会人员的精确定位十分的重要"; //经过上面的初始化,此时对指针的操作便不会出现错误。
strcpy(str ,"采用strcpy()进行字符串的赋值这是完美的方法");//采用strcpy()进行字符串的赋值这是完美的方法1.被复制的指针变量 2.所要进行赋值的字符串
printf("输出的字符串的值: %s ",str);
puts("==================================================================== ");
struct student
{ int a;
char b;
float c;
void (*p)(int date);

};
struct student stu1={1,'A',1.2}; //实例化对象
printf("输出初始化的结果:%d ",stu1.a);
printf("输出初始化后字符变量的结果: %c ",stu1.b);
printf("输出初始化浮点型变量的结果:%f ",stu1.c);
// p(10);
stu1.p=detes; //将结构体的中函数指针,通过函数的地址进行赋值,注意在进行赋值的时候,函数只需要函数名即可函数名便可以表示函数的地址,如同数组一样
stu1. p(10); //在函数的实现的时候,依然需要对象stu1进行调用不然将会出现错误,此时p指针的参数便是传递给指针所指的对象函数的形式参数。
return 0;
}

//////////////////////////////////////////////////////////////////////////////////结构体部分三///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{ struct student //定义结构体,注意关键字struct
{ int score;
char *name; //此处的指针是野指针
};
int i;
struct student maxscore; //对象的实例化,注意不能直接通过结构体进行实例化对象,应当加上关键字
struct student minscore; //对象的实例化 ,注意不能直接通过结构体进行实例化对象,应当加上关键字
struct student stu[4]; //此时实例化的对象是可变的,可以根据索引及进行创建新的对象
for(i=0;i<sizeof(stu)/sizeof(stu[0]);i++) //判断对象总共的个数,可以类似于数组的大小的求解方法
{ stu[i].name=(char*)malloc(128); //将指针进行空间开辟,采用mallooc()函数,
memset(stu[i].name,'',128); //实现指针的初始化。1.需要初始化的指针,2.用于初始化的字符,3.初始化的大小
printf("请输出%d个学生的名字:",i+1);
scanf("%s",stu[i].name); //通过scanf()进行字符串的输入,注意在scanf()函数的双引号中不要放入其他的标志,尤其是换行。将会导致输出错误
//字符串的输入不需要进行取地址。此时输入的字符串便是表示地址。
printf("请输入%d个学生的成绩:",i+1);
scanf("%d",&stu[i].score); //地址输入放入是整数,需要进行取地址
}
int j;
j=0;
//判断的第一种方式
//maxscore.score=stu[0].score; //通过对象调用结构体的中元素
//minscore.score=stu[0].score; //通过对象调用结构体中的元素
//判断的第二种方式
maxscore=stu[0]; //重点,重点,可以经实例化的对象直接通过另一个对象进行赋值,
//当一个对象被赋值成另一个对象是,其中的变量的值也会发生改变
minscore=stu[0];
for(j=0;j<sizeof(stu)/sizeof(stu[0]);j++) //求出对象的个数。
{
printf("输出第%d个学生的成绩",j+1);
printf("%s:%d ",stu[j].name,stu[j].score);
//判断的第一种方式
/*
if(maxscore.score<stu[j+1].score)
{ maxscore.score=stu[j+1].score;
}
if(minscore.score>stu[j+1].score)
{minscore.score=stu[j+1].score;
}
*/
if(maxscore.score<stu[j+1].score)
{
maxscore=stu[j+1]; //直接进行对象的赋值
}
if(minscore.score>stu[j+1].score)
{
minscore=stu[j+1]; //直接及逆行对象的赋值

}
}
printf("输出学生中的最高分:%d ",maxscore.score);
printf("输出学生中的最低分:%d ",minscore.score);
return 0;
}

原文地址:https://www.cnblogs.com/Nic-zhang/p/14513290.html