*(p=&c)=*pa*(*pb);解释一下
时间: 2024-01-17 20:18:35 浏览: 26
这个表达式 `*(p=&c)=*pa*(*pb)` 可以分解为以下几个步骤来解释:
1. `p=&c`:将变量 `c` 的地址赋值给指针变量 `p`。这意味着 `p` 现在指向了变量 `c` 的内存地址。
2. `*pa`:取指针变量 `pa` 所指向的内存地址的值。假设 `pa` 指向的是变量 `a`,那么 `*pa` 就是变量 `a` 的值。
3. `*pb`:取指针变量 `pb` 所指向的内存地址的值。假设 `pb` 指向的是变量 `b`,那么 `*pb` 就是变量 `b` 的值。
4. `*p`:取指针变量 `p` 所指向的内存地址的值。根据第一步的赋值操作,`p` 指向了变量 `c` 的内存地址,所以 `*p` 就是变量 `c` 的值。
5. `*p = *pa * (*pb)`:将 `*pa` 的值乘以 `*pb` 的值,然后将结果赋值给 `*p` 所指向的内存地址。也就是将变量 `c` 的值设置为 `a` 的值乘以 `b` 的值。
总结起来,这个表达式的作用是将变量 `c` 的值设置为变量 `a` 的值乘以变量 `b` 的值。
相关问题
21.执行下列程序段后: int a=1,b=2,*p,*pa=&a,*pb=&b; p=pa; pa=pb; pb=p; printf("%d,%d",a,b); 输出结果是______。 A. 1,1 B. 1,2 C. 2,2 D. 2,1 标准答案:B
执行程序段后,`a`的初始值为1,`b`的初始值为2,`pa`指向`a`的地址,`pb`指向`b`的地址,`p`指向`pa`指向的地址。接下来进行指针交换操作,先将`pa`指向的地址赋值给`pb`,然后将`pb`指向的地址赋值给`pa`,最后将指针`p`赋值给`pb`,此时`pa`指向`b`的地址,`pb`指向`a`的地址,`p`指向`a`的地址。最后输出`a`和`b`的值,由于进行的是指针交换操作,`a`和`b`的值并没有改变,因此输出结果为`1,2`,选项B是正确的。
任意输入两个整数,编写三个函数分别实现:(1)计算两个数的加法和;(2)计算两个整数的减法差;(3)交换这两个整数的数值。要求用“函数指针”调用这三个函数,结果在主函数中输出。目前已编写完成main函数,请编程实现sum函数、minus函数和swap函数,函数功能和要求如下所示。 /* @Filename: ex601.c @Author: Ju Chengdong @Version: 1.0 @Date: 2021-03-18 @Description: Simple Application of Pointer */ #include <stdio.h> /*主函数*/ int main(void){ int sum(int *a, int *b); int minus(int *a, int *b); void swap(int *a, int *b); int a, b; int *pa = &a, *pb = &b; scanf("%d,%d", &a, &b); int (*p)(int *, int *); p = sum; printf("%d", (*p)(pa, pb)); p = minus; printf("\n%d", (*p)(pa, pb)); void (*q)(int *,int *); q = swap; (*q)(pa, pb); printf("\n%d,%d", a, b); return 1; } /* * 函数名称:sum * 函数功能:对两个整数进行加法计算 * 形式参数:a,整型指针 * 形式参数:b,整型指针 * 返 回 值:int型,为两个整数的加法和 */ int sum(int *a, int *b){ //请编程实现本函数 } /* * 函数名称:minus * 函数功能:对两个整数进行减法计算 * 形式参数:a,整型指针 * 形式参数:b,整型指针 * 返 回 值:int型,为两个整数的减法差 */ int minus(int *a, int *b){ //请编程实现本函数 } /* * 函数名称:swap * 函数功能:交换两个整数数值 * 形式参数:a,整型指针 * 形式参数:b,整型指针 * 返 回 值:无 */ void swap(int *a, int *b){ //请编程实现本函数 } 注:不得使用全局变量。
完成代码如下:
```c
#include <stdio.h>
int sum(int *a, int *b); // 声明sum函数
int minus(int *a, int *b); // 声明minus函数
void swap(int *a, int *b); // 声明swap函数
int main(void){
int a, b;
int *pa = &a, *pb = &b;
scanf("%d,%d", &a, &b);
int (*p)(int *, int *);
p = sum;
printf("%d", (*p)(pa, pb));
p = minus;
printf("\n%d", (*p)(pa, pb));
void (*q)(int *,int *);
q = swap;
(*q)(pa, pb);
printf("\n%d,%d", a, b);
return 1;
}
int sum(int *a, int *b){
return *a + *b; // 返回a和b的和
}
int minus(int *a, int *b){
return *a - *b; // 返回a和b的差
}
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp; // 交换a和b的值
}
```
运行结果:
输入:5,3
输出:8
2
3,5
相关推荐
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)