若有以下说明和语句,则pl-p2的值为()。 int a [10],*p1,*p2 ;p1-a;p2=&a[5];
时间: 2024-02-12 22:04:52 浏览: 70
根据题目给出的说明和语句:
```
int a[10], *p1, *p2;
p1 = a;
p2 = &a[5];
```
可知 `p1` 指向数组 `a` 的首元素,`p2` 指向数组 `a` 的第 6 个元素。因此,表达式 `p2 - p1` 的值即为 `&a[5] - &a[0]`,即两个指针之间的元素个数。由于数组 `a` 中共有 10 个元素,因此 `p2 - p1` 的值为 5。因此,`pl-p2` 的值为 `-5`。
相关问题
*p1 ^= *p2; *p2 ^= *p1; *p1 ^= *p2;
这是一个常见的交换两个变量值的操作,通过异或运算实现。在这段代码中,`p1`和`p2`是指针,通过解引用操作符`*`来访问指针指向的值。代码中的三行语句交换了`p1`和`p2`指向的值。
具体的交换过程如下:
1. 第一行语句中,通过异或运算交换了`*p1`和`*p2`的值,结果保存在`*p1`中。
2. 第二行语句中,通过异或运算交换了`*p2`和之前保存在`*p1`中的值,结果保存在`*p2`中。
3. 第三行语句中,通过异或运算交换了之前保存在`*p1`中的值和之前保存在`*p2`中的值,结果保存在`*p1`中。
这样就完成了`p1`和`p2`指向的值的交换。
int k=2;int *p1,*p2;且p1与p2均指向变量k,下面不能正确执行赋值语句是k=*p1+*p2; p2=k ; p1=p2 ; k=*p1*(*p2);
下面不能正确执行赋值语句是 p1=p2;。
因为p1和p2都是指向int类型的指针变量,而p2是一个int类型的变量。在这种情况下,将p2的值赋给p1是不合法的,因为它们的类型不匹配。正确的做法是将p2的地址赋给p1,即 p1=&p2; 。
所以正确的代码应该是:
```c++
int k=2;
int *p1, *p2;
p1 = &k;
p2 = &k;
k = *p1 + *p2;
p2 = &k;
p1 = p2;
k = *p1 * (*p2);
```