一、定义结构体变量
举个具体的例子,如将在校学生的信息定义为一个结构体,信息内容包括学生的姓名(string)、学号(long)、年龄(int)等,就可以声明如下:
struct {
char sName[10];
long sNo;
int sAge;
};
结构体本质是一种数据类型,和C语言的内置内型(char,int,long …)类似,我们可以用它来定义变量,如定义一个学生Jack就可以这样:
struct {
char sName[10];
long sNo;
int sAge;
}Jack;
如还要再定义一个学生Rose:
struct {
char sName[10];
long sNo;
int sAge;
}Rose;
我们就发现每次定义一个这样的结构体变量非常麻烦,每次都要将结构体类型声明完整写一遍,于是就引进了在struct关键字后面加上“结构标签”,例如上面的结构体就可声明为:
struct stuInfo{
char sName[10];
long sNo;
int sAge;
};
从此定义变量可以这样完成:
struct stuInfo Jack;
struct stuInfo Rose;
如果你还嫌略为麻烦,C语言中还可以通过关键字typedef对类型重命名,这样我们可以将上面的结构体重新命一个名字,如叫sInfo:
typedef struct stuInfo sInfo;
定义变量将变得异常简单:
sInfo Jack;
sInfo Rose;
将上面几步融合一起,就是我们通常所使用的定义结构体变量的方法:
先声明一个结构体:
typedef struct stuInfo{
char sName[10];
long sNo;
int sAge;
}sInfo;
再定义变量:
sInfo stu1, stu2;
二、结构体指针
1.结构体指针对结构体中元素的访问需要用“->”访问,而结构体变量用“.”访问相应的结构体元素。
2.作为函数的形参时,结构体指针作为形参时,函数体内对结构体内容的改变将返回,而变量作为参数时则不能传递返回。
测试:
#include
typedef struct stru{
int a;
int b;
}A;
A var,*ptr; //定义结构体和结构体指针
void fun1(A vvar);
void fun2(A *pptr);
int main()
{
A ss=; //赋初值
var = ss;
ptr = &ss;
fun1(var);
printf("after fun1:\n");
printf("var.a is %d\n",var.a); //a和b的值未改变
printf("var.b is %d\n\n",var.b);
printf(".....................................\n\n");
fun2(&var);
printf("after fun2:\n");
printf("var.a is %d\n",var.a); //a和b的值均改变
printf("var.b is %d\n\n",var.b);
return 0;
}
void fun1(A vvar)
{
printf("var.a is %d\n",vvar.a);
printf("var.b is %d\n",vvar.b);
vvar.a = 100;
vvar.b = 200;
}
void fun2(A *pptr)
{
printf("ptr->a is %d\n",pptr->a);
printf("ptr->b is %d\n",pptr->b);
pptr->a = 300;
pptr->b = 400;
}
领取专属 10元无门槛券
私享最新 技术干货