2018年4月5日,12:21
运行结果如下:
定义结构体类型的方法:
struct 结构体名{成员表列}(结构体变量名);
定义结构体类型应当注意以下几点:
1."struct" 和后面的";" 必不可少。
2.结构体名可以没有,结构体变量名可以没有,但"struct"必须有。
3."struct+结构体名" 为结构体类型名。
4.只能对结构体的各成员进行赋值,不能对类型赋值。
5.结构体的各成员必须进行类型声明,成员命名规则与变量名相同。
6.将一个变量定义为标准类型(基本数据类型)与定义为结构体类型的不同之处在于:后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(例如struct student类型),因为可以定义出许许多多种具体的结构体类型。而在定义变量为基本数据类型如整型时,只需简单的定义为int类型即可。(比如struct student s;和 int s;)
7.不能将结构体变量作为一个整体进行输入和输出,只能对结构体变量的各成员进行输入输出。
8.成员也可以是结构体变量(结构体类型的变量名),在进行输出操作时,应当用若干个成员运算符(结构体变量.成员),一级一级地寻找最低一级的成员(不是结构体类型),只能对最低级的成员进行操作。
9.结构体变量中的成员与普通变量同级,可以像普通变量一样进行赋值,输入,运算,输出等操作。
10.可以引用结构体变量中的成员的地址,也可以引用结构体变量的地址。(结构体变量的地址主要用作函数参数,传递结构体变量的地址。)
11.成员名可以与程序中的变量名相同,如上述程序中 假使把char leader_name[20]; 改成char leader[3]; 是可以的,但是这个leader[3]与结构体中的leader[3]互不干扰。
指向结构体变量的指针:
运行结果如下:
显然,在函数执行时,将结构体变量"stu_1"的起始地址赋给指针"*p",接着对"stu_1"的各成员赋值,第一次用"stu_1.成员"的形式进行输出,第二次用"(*p).成员"的形式,输出结果一致。
这里需要注意一下(*p)两侧的小括号不可省去,因为成员运算符"."的优先级要高于"*"。