指针的练习(附个人理解),Copy于大庆指针->

挺有意思的,适合指针运算符掌握不是很熟练的同学hhh 

放在前面:预先复习

对于指针的运算 是右向左(←),需要注意的是p++依然是执行完这个语句后再进行"p=p+1"运算。执行完语句即遇到" ; " , 还有就是++*p & *++p。第一个是*p的值+1(*p = (*p)+1),第二个是*(p+1)的值。

*p++ 因为右向左方向进行运算,p++ → *p 所以应该先看到p++,再看到*p,但是p++的++在此刻并不对p的指向进行更改,而是和正常a++一样 告诉你 先取用完*p 取用完(printf输出后) 我可就要进行"p=p+1"运算啦。

时刻记住(++)在后一定是延时操作,不管你是先后看到的。

++*p++ 老规矩 右向左来看,p++ → *p → ++(*p) so 应该可以理解了吧,这步运算就是先告诉你,我看到了p++,所以这个语句进行完 (";") 之后,我会把p指向改变到现在p的下一位(即进行"p=p+1"运算然后取用*p的值(此时不输出),最后进行*(p) = *(p) + 1;  然后输出*(p)(注意此时*p已经+1了),并且 此时 *p 已经发生了改变,现在输出完了,所以进行"p=p+1"运算。

#include <stdio.h>
int main()
{
	int nums[10] = { 3,9,5,1,4,7,5 };
	int *p = nums;
	p++;
	printf("%d", *p++);
	printf("%d", (*p)++);
	printf("%d", *p+1);
	printf("%d", *p); 
	printf("%d", *(p+1));
	printf("%d", *p);
	printf("%d", ++*p++);
	printf("%d", ++(*p));
	printf("%d", *p);
	printf("%d", *++p);
	return 0;
}

放在后面:熟练掌握 (和前面一样 没问题略过就行。)

对于指针的运算 是右向左(←),需要注意的是p++依然是执行完这个语句后再进行"p=p+1"运算。执行完语句即遇到" ; " , 还有就是++*p & *++p。第一个是*p的值+1(*p = (*p)+1),第二个是*(p+1)的值。

*p++ 因为右向左方向进行运算,p++ → *p 所以应该先看到p++,再看到*p,但是p++的++在此刻并不对p的指向进行更改,而是和正常a++一样 告诉你 先取用完*p 取用完(printf输出后) 我可就要进行"p=p+1"运算啦。

时刻记住(++)在后一定是延时操作,不管你是先后看到的。

++*p++ 老规矩 右向左来看,p++ → *p → ++(*p) so 应该可以理解了吧,这步运算就是先告诉你,我看到了p++,所以这个语句进行完 (";") 之后,我会把p指向改变到现在p的下一位(即进行"p=p+1"运算然后取用*p的值(此时不输出),最后进行*(p) = *(p) + 1;  然后输出*(p)(注意此时*p已经+1了),并且 此时 *p 已经发生了改变,现在输出完了,所以进行"p=p+1"运算。

!!注意如果没有赋值,它只会输出变化后的值 并不会改变变量的值哦 例如 printf ("%d" , a+1);

此处 -> 仅代表运行完这一步后变量的变化;(作者萌新,如果有错的欢迎xdm指出,虚心改进)

#include <stdio.h>
int main()
{
	int nums[10] = { 3,9,5,1,4,7,5 };
	int *p = nums;

	p++; //-> p[1]=9

	printf("%d", *p++); //输出9 -> p[2]=5

	printf("%d", (*p)++); //输出5 -> p[2]=5+1

	printf("%d", *p+1); //输出7 -> p[2]=6

	printf("%d", *p);  //输出6 -> p[2]=6

	printf("%d", *(p+1)); //输出1 -> p[2]=6

	printf("%d", *p); //输出6 -> p[2]=6

	printf("%d", ++*p++); //输出p[2]=6+1 -> p[3]=1

	printf("%d", ++(*p)); //输出p[3]=1+1 -> p[3]=2

	printf("%d", *p); //输出2 -> p[3]=2

	printf("%d", *++p); //输出p[4]=4 -> p[4]=4

	return 0; // 9 5 7 6 1 6 7 2 2 4
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值