C语言 结构体&指针 应用补充


结构体相关的指针的应用主要分两种:结构体指针 与 指针作为结构体的成员

一、结构体指针

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语言结构体详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值