C语言中 指针与结构体

  

就像数组一样,指向结构体的指针存储了结构体第一个元素的内存地址。与数组指针一样,结构体的指针必须声明和结构体类型保持一致,或者声明为void类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
struct person {
   int age;
   char *name;
};
struct person first;
struct person *ptr;
 
first.age = 21;
char *fullname = "full name" ;
first.name = fullname;
ptr = &first;
 
printf ( "age=%d, name=%s\n" , first.age, ptr->name);

第1至6行声明了一个person结构体,一个变量指向了一个person结构体和指向person结构体的指针。第8行为age成员赋了一个int值。第9至10行我们声明了一个char指针并赋值给一个char数组并赋值给结构体name成员。第11行我们把一个person结构体引用赋值给结构体变量。

第13行我们打印了结构体实例的age和name。这里需要注意两个不同的符号,’.’ 和 ‘->’ 。结构体实例可以通过使用 ‘.’ 符号访问age变量。对于结构体实例的指针,我们可以通过 ‘->’ 符号访问name变量。也可以同样通过(*ptr).name来访问name变量。

指针和结构类型的关系 
可以声明一个指向结构类型对象的指针。 
  例十一: 
structMyStruct 

 inta; 
 intb; 
 intc; 

MyStructss={20,30,40};
//声明了结构对象ss,并把ss的三个成员初始化为20,30和40。 
MyStruct*ptr=&ss;
//声明了一个指向结构对象ss的指针。它的类型是MyStruct*,它指向的类型是MyStruct。 
int*pstr=(int*)&ss;
//声明了一个指向结构对象ss的指针。但是它的类型和它指向的类型和ptr是不同的。
  请问怎样通过指针ptr来访问ss的三个成员变量? 
  答案: 
ptr->a; 
ptr->b; 
ptr->c; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值