挺有意思的,适合指针运算符掌握不是很熟练的同学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
}