目录
1.声明结构指针
2.用指针访问成员
3.传递结构成员
4.传递结构的地址
5.传递结构
6.机构的其他特性
7.结构中的字符数组和字符指针
关于为什么要使用指向结构的指针。
第一,就像指向数组的指针比数组本身更容易操作一样,指向结构的指针通常比结构本身更容易操控。
第二,在一些早期的C实现中,结构不能作为参数传递给函数,但是可以传递指向结构的指针。
第三,传递指针通常更有效率。
第四,一些用于表示数据的结构中包含指向其他结构的指针
1.声明结构指针
Struct guy * him;
指针him指向任意现在的guy类型的结构。例如,如果barney是一个guy类型的结构变量
Him = &barney
和数组不同的是,结构变量名并不是结构变量的地址,所以传递地址的时候必须用上&运算符
如果结构是一个机构数组,可以用
Hime=&barney[0];
Hime+1相当于fellow[1]
2.用指针访问成员
第一种方法,用->运算符
第二种方法,用*运算符
Him->age用(*him).age
(*him)就是ycj
记得(*him)一定要加个括号,因为.运算符比*运算符的优先级高
ycj.age=him->age=(*him).age
3.传递结构成员
只要结构成员是一个具有单个值的数据类型,便可把它作为参数传递给接受特定类型的函数
add(stan.int_1,stan.int_2)
这里add的两个参数都接受int类型的值,而a_n结构相对应的int_1,int_2也都是int类型的所以正好匹配
传递成员地址同样也是可以的
4.传递结构的地址
这里记住
struct a_n * a中a是一个指针,所以在使用传入结构成员数值的时候一定要使用->运算符
5.传递结构
这里传递结构和传递结构地址唯一区别就是,传递结构,使用的数值是结构的副本,而地址则是结构的本身数值
6.机构的其他特性
1.C允许把一个机构赋值给另一个结构(成员对应类型相同)
2.函数不仅把结构本身作为参数传递,同时也能把结构作为返回值返回。
struct a_n eva(struct a_n * a)
将返回一个struct a_n类型结构的值
struct a_n stan_2 = eva(&stan_1);
将eva返回destruct a_n类型的成员值给到stan_2;
7.结构中的字符数组和字符指针
struct names {
char first[20];
char first[20];
}
struct pnames{
char * first;
char * last;
}
struct names veep = {"y","c"};
struct pnames treas ={'h',"w"};
对于struct names类型的结构变量veep,以上字符串都存储在结构内部,结构总共要分配40字节存储姓名。然而,对于struct pnames类型的结构变量treas,以上字符串存储在编译器存储常量的地方。机构本身只能存储两个地址,在我们的系统中占16字节。struct pnames结构不用为字符串分配任何存储空间。它使用的是存储在别处的字符串。
如果字符指针这样使用
struct pnames attorney;
scanf("%s",attorney.last)对于attorney而言,scanf()把字符串放在attorney.last表示的地址上。由于这是未经初始化的变量,地址可能是任何值,因此程序可以把名放在任何地方。如果走运的话,程序不会出现问题,但是这也会为你的程序留下一个很大的隐患