结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同;
-- 可进行的操作 : 结构体可以进行 拷贝 赋值操作, 可以作为 函数参数 和 函数返回值;
1. 结构体的基本使用
结构体声明 : struct 结构标记 {结构成员} 普通变量;
-- 结构体示例 :
- struct student
- {
- char *name;
- int age;
- };
-- 结构标记 : struct 后面的 student 是结构标记, 这个标记 可写 可不写, 其作用是 为结构命名, 结构标记可以代表 {} 中的声明的所有的成员变量 ;
-- 结构成员 : 在 {} 中定义的变量就是结构成员;
-- 普通变量 : 在声明结构体的时候后面可以加上若干普通变量, 相当于定义结构体变量;
结构体变量声明 : 可以在定义的时候声明变量, 也可以在定义完结构体使用 结构标记 声明变量;
-- 定义结构体时声明变量 : 这种声明变量的方式可以不用 结构标记, 变量名写在 花括号 后面, 用头号隔开;
- struct student
- {
- char *name;
- int age;
- } s1, s2, s3;
-- 使用结构标记声明 : 结构标记 student 代表了花括号的声明, 是 结构体的简写, 可以使用结构标记代替花括号中的内容;
- struct student s4, s5, s6;
结构体内存分配 : 结构体内存是在声明变量的时候分配的, 如果只声明了结构体, 没有声明对应变量, 那么不会分配内存;
结构体变量初始化 :
-- 声明结构体的时候初始化 : struct student s1 = {"Tom", 12} ; 注意 初值表中必须时结构体对应类型的常量表达式;
-- 声明之后初始化 : 结构体变量名.成员名 可以访问结构体中的成员变量, s1.name = "Tom"; s2.age = 12;
结构体嵌套 : 结构体中的成员变量可以是 结构体变量;
- struct student
- {
- char *name;
- int age;
- } s1;
- struct class
- {
- struct student s1;
- struct student s2;
- } c1;
结构体代码示例 :
- /*************************************************************************
- > File Name: base_struct.c
- > Author: octopus
- > Mail: octopus_work.163.com
- > Created Time: 2014年03月24日 星期一 10时49分46秒
- ************************************************************************/
- #include<stdio.h>
- int main(int argc, char **argv)
- {
- /*
- * 声明结构体 同时声明变量s1
- */
- struct student
- {
- char *name;
- int age;
- } s1;
- /*
- * 结构体嵌套
- */
- struct class
- {
- struct student s1;
- struct student s2;
- } c1;
- struct student s2 = {"Tom", 12};/*只有声明的时候才能对结构体初始化才能使用花括号赋值*/
- struct class c2 = {{"Jack", 13}, {"Pig", 15}};
- s1.name = "Hack"; /*变量声明后对结构体赋值只能一个一个赋值*/
- s1.age = 14;
- //s1 = {"fuck", 1}; /*只有在初始化的时候才能使用 花括号初始化结构体变量*/
- c1.s1.name = "CJ";
- c1.s1.age = 21;
- c1.s2.name = "KW";
- c1.s2.age = 22;
- /*访问结构体中的变量, 使用 . 进行访问*/
- printf("s1 : name = %s, age = %d \n", s1.name, s1.age);
- printf("s2 : name = %s, age = %d \n", s2.name, s2.age);
- printf("c1 : s1 : name = %s, age = %d ; s2 : name = %s, age = %d \n", c1.s1.name, c1.s1.age, c1.s1.name, c1.s2.age);
- printf("c2 : s1 : name = %s, age = %d ; s2 : name = %s, age = %d \n", c2.s1.name, c2.s1.age, c2.s1.name, c2.s2.age);
- return 0;