struct stud long num; char name 10li char sex: strout date char month name 4: int day; int year: 3 birthday int score 4; j struct stud stul, stu2, strcpy( stul birthday month name,”Feb”); stul birthday day=16; stul birthday year=1980;
struct nstud{ long num; char name[10]; char sex; strcut date{ char month_name[4]; int day; int year; } birthday; int score[4]; } struct nstud stu1,stu2; strcpy(stu1.birthday.month_name,”Feb”); stu1.birthday.day=16; stu1.birthday.year=1980;
82结构变量的指针2 、结构指针的说明 存储类型区分符 struct结构类型名*标识符; 例 struct stud sl,S2 *pstui pstu=&sl; 二、用结构指针引用结构变量成员 (*pstu,num=98183341 scanf(%s, (pstu) name); for(i=0;i<4;i++) printf( ood, pstu) score; 注意:(*结构指针名)成员名中的0不能省略。“”的运算符优 先级高于‘*’
8.2 结构变量的指针 一、结构指针的说明 存储类型区分符 struct 结构类型名 *标识符; 例:struct stud s1,s2 *pstu; pstu=&s1; 二、用结构指针引用结构变量成员 (*pstu).num=98183341; scanf(“%s”, (*pstu).name); for(i=0;i<4;i++) printf(“%d”, (*pstu).score[i]); 注意: (*结构指针名).成员名 中的()不能省略。“.”的运算符优 先级高于‘*’
成员选择运算符 形式:结构的指针→>成员名 例: struct date d,*p=&d 下列同一行上的三个表达式等价 p->year d vear (p).year p->day d day (p).day p->month name d. month name (p). month name 的优先级等同与“”。 struct stud S, "p=&s: Sbirthday year (p). birthdayyear p->birthday year (p->birthday). year 四个表达式等价
三、成员选择运算符“->” 形式:结构的指针->成员名 例:struct date d, *p=&d; 下列同一行上的三个表达式等价: p->year d.year (*p).year p->day d.day (*p).day p->month_name d. month_name (*p). month_name “->”的优先级等同与“.”。 struct nstud s,*p=&s; s.birthday.year (*p).birthday.year p->birthday.year (p->birthday).year 四个表达式等价
struct A int len; char str;}s={1,”0123456”},“p=&s; 表达式表达式的值表达式执行的操作 ++p->len 2 len增1后访问en en p->len++ 访问len后len增1 str *p->str 48 str所指对象“0的值 0 *p->str++ 48 访问str所指对象“0 的值后str增1指向1 (p->str)++48 访问str所指对象“0 1234 后str所指对象“0增1 *++p->str 49 单目运算右结合, 先str增1,再str所指对象‘1的值
struct A {int len; char *str;} s={1,”0123456”}, *p=&s; 表达式 表达式的值 表达式执行的操作 ++p->len 2 len增1后访问len p->len++ 1 访问len后len增1 *p->str 48 str所指对象‘0’的值 *p->str++ 48 访问str所指对象‘0’ 的值后str增1指向‘1’ (*p->str)++ 48 访问str所指对象‘0’ 后str所指对象‘0’增1 *++p->str 49 单目运算右结合, 先str增1,再str所指对象‘1’的值 len 1 str p ‘0’ ‘1’ ‘2’ ‘3’ ‘4’ ‘5’ ‘6’ ‘\0‘ s
83结构和函数 结构和结构指针作为函数参数 将结构传递给函数有三种可用的方法: (1)将每一个结构成员作为一个参数; 般仅当需要结构变量的个别成员值时使用。 (2)将整个结构变量作为一个参数; 函数对结构变量的副本进行操作。 (3)用指向结构变量的指针作参数。 对较大的结构变量传递效率较高,仅传递一个指针的值。 同时被调用函数可对调用函数中结构变量的值进行修改
8.3 结构和函数 一、结构和结构指针作为函数参数 将结构传递给函数有三种可用的方法: (1)将每一个结构成员作为一个参数; 一般仅当需要结构变量的个别成员值时使用。 (2)将整个结构变量作为一个参数; 函数对结构变量的副本进行操作。 (3)用指向结构变量的指针作参数。 对较大的结构变量传递效率较高,仅传递一个指针的值。 同时被调用函数可对调用函数中结构变量的值进行修改