结构体相关的指针的应用主要分两种:结构体指针 与 指针作为结构体的成员
一、结构体指针
1.指向结构体变量的指针变量
变量说明的一般形式为:
struct StructName *PointerName
赋值是把结构体变量的首地址赋予该指针变量,不能把结构体名赋予指针变量 例:
struct stu boy;
struct stu *pstu;
pstu=&boy //是正确的
pstu=&stu //是错误的
使用结构体指针变量访问结构体成员的一般形式:
( * 结构体指针变量 ) . 成员名
或
结构体指针变量 -> 成员名
例如
(*pstu).num
pstu -> num
注意括号! 是因为取结构体变量成员符.
和指针引用结构体成员符->
的优先级高于取址运算符*
2.指向结构体数组的指针
设ps为指向结构体数组的指针,则ps指向结构体数组的0号下标元素ps+1指向1号下标元素。例
struct stu {
int num;
char* name;
char score;
}student[3] = {
{101,"lier",68},
{102,"hangsan",79},
{103,"wangwu",82},
};
void main()
{
struct stu *ps;
for (ps = student; ps < student + 3; ps++)
{
printf("%d\t% s\t% d\t\n",ps->num,ps->name,ps->score);
}
while (1);
}
注意! 结构体指针指向结构体数组时只能指向数组不能指向数组内的结构体成员 例:
ps=student; //可以
ps=&student[1]; //可以
ps=&student[1].name; //错误
二、指针作结构体成员
指针变量作为结构体的内部成员
typedef struct teststruct
{
char ua;
int *up;
}u;
1.结构体变量内的指针变量成员
因为去结构体成员符.
的优先级高于取指针内容符*
所以
stu.up 等同于 p
*stu.up 等同于 *p
#include<stdio.h>
typedef struct teststruct
{
char ua;
int *up;
}u;
int main()
{
int a = 0;
u stu;
stu.up = &a; //取变量a的地址赋给指针变量
*stu.up = 6; //修改指针变量指向的变量a的值
printf("a的值:%d",a); //此时输出a的值为6
while (1);
}
2.结构体指针变量内的指针变量成员
因为指针引用结构体成员符->
的优先级高于取指针内容符*
所以
pstu->up 等同于 p
*pstu->up 等同于 *p
#include<stdio.h>
typedef struct teststruct
{
char ua;
int *up;
}u;
int main()
{
int a = 0;
u stu;
u*pstu=&stu;
pstu->up = &a;
*pstu->up = 6;
printf("a的值:%d",a); //此时输出a的值为6
while (1);
}
本文引用参考:C语言结构体详解