结构型的定义数组
基本数据类型是系统提供的数据类型,而结构类型是用户在程序中本身定义的一种数据类型。这种结构型必须先定义,而后才能用已经定义的结构型来定义相应的变量、数组、指针等。函数
特色:能够本身定义一种数据类型来存放类型不一样的数据。这种数据类型就称为“结构型”。结构型又称“结构体型”。指针
例如:姓名是字符串型(用字符数组来存放);对象
性别是字符型(用‘m’表示男性、用‘f’表示女性);内存
年龄是整型;字符串
工资是实型。变量
struct person{数据类型
char name[10]引用
char sex;float
int age;
float wage;
}
这样就能够定义含有一个字符数组、一个字符型、一个整型、一个实型的数据为一个结构型数据。
结构型的定义
struct 结构型名{
数据类型符1 成员1 名;
。。。。。。。。
数据类型符n 成员n 名;
};
其中:结构型名 是用户取得标识符。
结构类型符 能够是基本类型说明符,也能够是已定义过的某种结构型
成员名 能够是标识符、标识符[长度]、*标识符等。
成员也称“域”、“结构份量”。
注意:结构型仅仅是一种数据类型,系统并不会给结构型成员分配内存。已经定义的某种结构型能够做为一种数据类型,当用来定义变量、数组、指针变量时,才会给定义的变量、数组、指针变量分配内存。
结构型变量的定义和成员的引用
1)结构型变量成员的引用
1.结构性变量成员的引用方法以下。
结构型变量名. 成员名
其中的“.” 称为成员运算符,是双目中缀运算符。前一个对象必须是结构型的变量(或结构型数组元素),后一个对象是该结构型的成员名。
例如:struct xy{int x; float y[10];}xy1={1,{1.0,2.0,3.0}};
xy1.x //至关于一个整型变量,其值为1.
xy1.y //至关于一个实型数组的首地址。
xy1.y[1] //至关于一个实型数组元素,其值为2.0
下列引用是错误的:xy.x xy是结构型名称,不是该结构型变量(或数组元素)
2)结构型变量成员地址的引用方法
以下:
成员时变量形式的变量地址: &结构型变量名. 成员名
成员是数组形式的变量地址: 结构型变量名. 成员名
成员时数组,其数组元素的地址: &结构型变量名. 成员数组[下标]
例子:struct student2{long number; char name[10];};
void main(){
struct student2 x;
long * p_number;
char *p_name;
p_number=&x.number;//让指针变量分别执行结构型变量x的两个成员
p_name=x.name
*p_number=100001L;
strcpy(p_name,"zhao1");
}
3)结构型变量地址的引用方法
以下:
&结构型变量名
注意,存放结构型变量地址的指针变量必须是相同结构型的结构型指针变量。
结构型数组的定义和数组元素成员的引用
1)结构型数组的定义和初始化
例如,定义一个学生数组,能够使用下列三种方法
1.先定义结构型,而后再定义结构型数组并赋初值。
2.定义结构性的同时定义数组并赋初值。
3.定义无名成的结构型的同时定义数组并赋初值。
struct student {
long number;
char name[10];
char sex;
float score[3];
};
struct student s[3]={
{200001L,"qian2",'m',{78,89,98}},
{200001L,"qian2",'m',{78,89,98}},
{200001L,"qian2",'m',{78,89,98}}
}
2)结构型数组元素成员的引用
1.构型数组元素成员的引用
引用方法以下:
结构型数组名[下标].成员名
struct students{
long number;
char name[10];
}s[4]; //定义student2结构型数组s
void main(){
s[0].number=100001L;//给结构型数组元素s[0]的成员number复制
strcpy(s[1].name,"sun3");//给结构型数组元素s[1]的成员name[]赋值。
}
2)结构型数组元素成员地址的引用方法
&结构型数组名[下标]. 成员名
struct students{
long number;
char name[10];
};
void main(){
struct student2 s[2];
long *p_number;
char * p_name;
p_number=&s[0].number;//长整形指针变量指向结构型数组元素s[0]的成员number;
p_name=s[1].name;//字符型指针变量指向结构型数组元素s[1]的成员name数组.
*p_number=100001L;
strcpy(p_name,"sun3");
}
3)结构型数组元素地址的引用方法
&结构型数组名[下标]
存放结构型数组元素地址的指针变量必须是类型相同的结构型指针。
指向结构型数据的指针变量的定义和使用
1)指针变量指向数组元素
若是有一个结构型数组元素的地址已赋予相同结构型指针变量,能够使用下列两种方式来引用该元素的成员,其做用彻底相同。
方式1 (*指针变量).成员名
方式2 指针变量->成员名
注意:这里的指针变量必须已经指向某个结构型数组元素。例如,它指向的数组元素为“数组名[k]”,则上述两种引用方式均表明“数组名[k].成员名”
2)指针变量指向数组
方式1 (*(指针变量+k)).成员名
方式2 (指针变量+k)->成员名
注意,这里的指针变量必须已经指向某个结构型数组,则上述两种引用方式均表明“数组名[k].成员名”。
在函数间传递结构型数据
1)使用全局外部变量传递结构型数据
使用全局外部变量传递结构型数据时,只要在程序的开头定义结构型及其变量或数组,就能够在其后定义的函数间传递结构型数据。
#define N 10;
struct student3{long num; char name[10]; int age;}stu[N];
void my_in(){
int i ;
for(i=0;i<N;i++){
scanf("%s",stu[i].name);
}
return;
}
void main(){
int i;
my_in();
for(i=0;i<N;i++){
printf("%s",stu[i].name);
}
}
2)使用返回值方式传递结构型数据。
使用返回值方式只能返回1个结构型数据,定义函数时的数据类型符必须是某种已定义的结构型,利用“return(表达式)”;
define N 10;
struct student3{long num; char name[10]; int age;};
struct student3 my_in(){
int i ;
struct student3 stu1;
scanf("%s",&sut1.name);
return(stu1);
}
void main(){
int i ;
struct student3 stu[N]; //定义结构型student3的数组stu;
for(i=0;i<N;i++){
stu[i]=my_in(); //将函数返回值存入结构型数组元素。
}
for(i=0; i<N; i++){
printf("%s",stu[i].name);
}
}
3)使用形参与实参方式传递结构型数据。
1.使用地址参数方式。
使用地址传送方式,形参应被说明成某种结构型的数组或指针变量,而对应实参必须是同一种结构型的变量地址、数组名、数组元素地址、已赋值的指针变量。
2.使用值传递方式
使用值传递方式,形参应为变量形式,并要说明成某种结构型,而对应的实际参数必须是同一种结构型的变量或数组元素。