*p++语句

int main()
{
 int isz[3] = {1, 2, 3};
 cout << *isz << endl;

 int *p = isz;
 cout << *p++ << endl;
 cout << *p << endl;
 return 0;

出现return *p++;之类的语句,是把当前p所指对象的值返回,然后再p指针指向下一个元素,因为是

同一个语句所以在p指针移动之后,才return语句完整执行,把值返回的,这样写法可以省略一个临时对象来存放指针移动之前所指对象的值,代替int tmp = *p; ++p;(p++也可) return tmp;的写法

表达式 `*p++=*(p++)` 涉及指针操作、自增运算符和赋值操作,下面详细解释其含义和原理。 ### 含义 `*p++=*(p++)` 尝试将 `p` 指针当前指向的值赋给另一个位置,然后 `p` 指针自增两次。更具体地说,先取出 `p` 指针当前指向的值,将其赋给 `p` 指针下一个位置所指向的内存地址,之后 `p` 指针自增两次。 ### 原理 - **运算符优先级**:后缀自增运算符 `++` 优先级高于解引用运算符 `*`,但后缀自增是先使用变量的值,再进行自增操作。 - **执行顺序**:从右向左计算。先计算 `*(p++)`,它会先取出 `p` 当前指向的值,之后 `p` 自增;接着计算 `*p++`,同样先取出 `p` 当前指向的值(此时 `p` 已经自增过一次),然后 `p` 再次自增;最后将 `*(p++)` 取出的值赋给 `*p++` 所指向的位置。 ### 代码示例 ```c #include <stdio.h> int main() { int arr[] = {1, 2, 3, 4, 5}; int *p = arr; *p++ = *(p++); for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; } ``` ### 代码解释 - 定义一个包含 5 个元素的整数数组 `arr`,并将指针 `p` 指向数组的首元素。 - 执行 `*p++=*(p++)` 语句。假设 `p` 初始指向 `arr[0]`,先计算 `*(p++)`,取出 `arr[0]` 的值(即 1),然后 `p` 指向 `arr[1]`;接着计算 `*p++`,取出 `arr[1]` 的值(即 2),`p` 指向 `arr[2]`;最后将 `arr[0]` 的值(1)赋给 `arr[1]`。 - 使用 `for` 循环打印数组 `arr` 的所有元素。 ### 注意事项 该表达式的行为在不同编译器中可能存在差异,因为它涉及未定义行为。C 语言标准未明确规定 `p` 自增操作的具体顺序,可能导致不同编译器产生不同的结果。为保证代码的可移植性和可读性,建议避免使用这类复杂且易产生歧义的表达式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值