首先需要先了解结构体的基本知识:
1.结构体定义:
struct 结构体名
{
……结构体成员;
}
举例:
struct student
{
char name[10];
int age;
}
2.结构指针-struct *p
其中,p为指向结构的一个指针,在给p传地址时,要给他传入结构体类型的地址。
举例:
struct student *p;
struct student stu1={“Anna”,20};
p = &stu1;
依据上例可以发现,一个结构的名字并不是该结构的地址,必须使用&运算符,但是如果本身就是定义了一个结构指针,就像下面的例子一样。
struct student *p1;
struct student *p2;
p1 = p2;
总结struct两点用法,测试用例可以参照下面完整代码:
#include<stdio.h>
struct student
{
char name[20];
int age;
};
void main()
{
struct student stu1 = {"Anna",25};
printf("%s %d", stu1.name, stu1.age);
printf("\n");
struct student *p;
p = &stu1;
printf("%s %d", p->name, p->age);
printf("\n");
struct student *stu2;
stu2 = p;
printf("%s %d", stu2->name, stu2->age);
printf("\n");
}
输出:
其次,在用结构体时,不得不提到typedef 的用处,其作用类似于起别名,基本语法typedef 类型 类型别名
举例:
typedef int my_type1;
typedef char my_type2;
typedef char *my_ptr1;
typedef int *my_ptr2;
如上例,重点解释带有指针的定义,my_ptr1是指向字符类型的一个指针, 具体应用如下:
char *p1;
my_ptr1 p2;
p2 = p1;
重点记住,my_ptr1是一个指针,故p2是一个字符指针。
同理,结构指针的定义,类似于下例:
typedef struct student *stu;
stu p;
这里p就是一个结构指针,记住,是指针,能够指向结构体的一个指针。实际上也可以理解为typedef在这里的作用就是给struct student *起了个别名stu,这个就是神奇之处,stu竟然可以代表一个指针类型。为了加深理解,在第一个测试用例基础上,稍作改动加入typedef,如下:
#include<stdio.h>
struct student
{
char name[20];
int age;
};
typedef struct student my_stu;
typedef struct student *my_stu_ptr;
//也可以typedef struct student my_stu, *my_stu_ptr;
void main()
{
//测试my_stu
struct student stu1 = {"Anna",25};
my_stu stu2 = {"Tom",27};
printf("%s %d\n%s %d \n", stu1.name, stu1.age, stu2.name, stu2.age);
printf("---------------\n");
//测试my_stu_ptr
struct student *p1;
my_stu_ptr p2;
my_stu_ptr p3;
p1 = &stu1;
p2 = p1;
p3 = &stu1;
printf("%s %d\n%s %d\n%s %d\n", p1->name, p1->age, p2->name, p2->age, p3->name, p3->age);
printf("---------------\n");
}
输出:
原文地址:http://blog.csdn.net/xinyu913/article/details/45826213