C\C++ 学习笔记|关于p++->a,(p++)->a,++p->a,(++p)->a

C\C++ 学习笔记

关于p++ ->a,(p++)->a,++p->a,(++p)->a

心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。
在这里插入图片描述

关于p++ ->a,(p++)->a,++p->a,(++p)->a

在这里插入图片描述
注意
1.->的优先级比++高,所以p++->a即取指针p指向a的值,输出后指针p自增1,而++p->a相当于++(p->a)。即取指针p指向的a值,再给a自增1。

2.()->同级,根据从左至右的运算规则,(p++)->a即取指针p指向a的值,输出后p自增1,相当于p++->a,而(++p)->a即先给指针p自增1,然后取增1后的指针值指向所指向的目标a的值。

实践代码:

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
	struct table {
		int x, y;
	}a[4]={{10,20},{30,40},{50,60},{70,80}};
	struct table* p = a;
	printf("%d\n", p++->x);
	printf("%d\n", ++p->y);
	printf("%d",(a+3)->x);
}

实践结果:

在这里插入图片描述
第一次输出,取指针p指向a[0]的x值,输出后指针p再自增1并指向a[1]。符合条件
第二次输出,先取指针p指向a[1]的y值,然后y值自增1,再输出。 符合条件
第三次输出,先取结构体中第四个元素a[3]即a[0+3]的地址,再取a[3]指向x的值。符合条件

总结一下,其实就是结构体指针中“++”,“->“,”()"优先级的问题。

例题:

设有以下程序段,则值为6的表达式是()

struct st{
int n;
struct st*next;
};
static struct a[3]={5,&a[1],7,&a[2],9,0},*p;
p=&a[0];

A.p++ ->n   B.++p->n   C.p->n++   D.(*p).n++

答案:B
解析:A答案中指针p指向a[0]的n值5,所以A表达式的值为5,A
B答案中指针p先指向a[0]的n值5,然后n值自增1,所以B表达式的值为6。
C答案中指针p指向a[0]的n值5,所以C表达式的值为5,C
D答案中因为p=&a[0],所以即取结构体的a[0]的n值5,所以D表达式的值为5,D

心有猛虎,细嗅蔷薇。再见了朋友~

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值