2024年5月25日发(作者:)
9.1.9 指向结构体的指针
1. 结构体指针变量声明的一般形式
与一般变量一样,可以使一个指针变量指向结构体,从而形成结构体指针变量。其值
是所指向的结构体变量的首地址。通过结构体指针即可访问该结构体变量,这与数组指针
和函数指针的情况是相同的。结构体指针变量声明的一般形式为:
struct 结构名 *结构指针变量名;
对前面定义的结构体hero,可以使一个指针phero指向hero类型的某个变量:
struct hero *phero;
既然结构体指针变量也是一种结构体变量,当然可以使用其他的两种定义结构体变量
的方式定义结构体指针变量。具体定义方式此处不再叙述。
2. 为何需要结构体指针变量
之所以引入结构体指针变量,出于以下原因:
更易于操作
类似于数组指针比数组更易于操作一样(如排序问题),结构体指针比结构体本身更加
的易于操作。
更强的通用性
一些早期的C语言实现不支持将结构体变量作为参数传递给函数,但是结构体指针变
量却可以。
丰富的数据表示
许多奇妙的数据表示,如文件指针,都包含指向结构体的指针。
3. 指针变量到底指向什么?
与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后才能使用。赋值是
把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。
例如,下面对结构体指针变量phero1的赋值是正确的:
*phero1=&wusong;//将变量wusong的首地址赋值给指针变量phero
但是下面的赋值是错误的:
*phero2=&hero; //错误!
前面笔者已经强调过,结构体名和结构体变量是两个不同的概念,不能混淆。结构体
名只能表示一个结构形式,编译系统并不为其分配内存空间。只有当某变量被定义为这种
类型的结构体时,才为该变量分配存储空间。所以&wusong的形式是正确的,表示结构
体变量wusong的首地址,而&hero的形式是错误的,因为系统没有为hero分配内存,
发布者:admin,转转请注明出处:http://www.yc00.com/web/1716625193a2729262.html
评论列表(0条)