一个C语言指针问题

2025-04-13 04:37:46
推荐回答(1个)
回答1:

//说明解释
p1的值最后还是变了的呀,int value1=*(p1++); 它是现将p1所指向的变量(也即是变量x)的值
赋值给value1,所以打印出来的value1是371,然后p1自增1,由于p1存放的是变量x的地址,再自增1
那它指向的是另一个int型的内存空间了,这个地址是未知的,所以你再打印*p1,这个值是个随机值。
printf("%d, %d\n", value1, ++*p2);  //它先让p2所指向的变量(也即是变量y)的值自增1,即269+1=270了。
然后输出其值。
当函数fot指向完了,指针变量p1,p2的内存空间也就随之被系统回收,然后返回main()函数。
这里面涉及到几个问题:
1、前缀++和后缀++的区别:前缀++是先让变量参与运算,运算结束后让变量的值自增1;后缀++相反,先让变量自增1,然后
参与运算。
2、在++*p2这个表达式中,为什么不是p2自增加1,而是*p2自增加1,是因为指针运算符*(注意这里的*不是算法运算的乘号)
的优先级高于++,所以先让p2与*结合,然后让(*p2)这个整体所表示的值加1。