#include<stdio.h> int sum(int a,int b); int swap(int a,int b); int main(void) { int a,b,c; int (*p)(int,int); scanf("%d,%d",&a,&b); p=sum; c=(*p)(a,b); p=swap; (*p)(a,b); printf("sum=%d\n",c); printf("a=%d,b=%d\n",a,b); return 0; } int sum(int a,int b) { return a + b; } void swap(int*a,int *b) { int t =*a; *a=*b; *b=t; }这个代码要怎么修改
时间: 2023-12-15 13:05:40 浏览: 52
这段代码存在一些问题,主要是函数`swap`的参数类型和返回值类型与调用时的不一致。
以下是修改后的代码:
```c
#include<stdio.h>
int sum(int a, int b);
void swap(int* a, int* b);
int main(void)
{
int a, b, c;
int (*p)(int, int);
scanf("%d, %d", &a, &b);
p = sum;
c = (*p)(a, b);
p = swap;
(*p)(&a, &b); // 修改函数swap的参数
printf("sum=%d\n", c);
printf("a=%d, b=%d\n", a, b);
return 0;
}
int sum(int a, int b)
{
return a + b;
}
void swap(int* a, int* b) // 修改函数swap的返回值类型
{
int t = *a;
*a = *b;
*b = t;
}
```
修改后的`swap`函数的参数类型为指针类型,而且不需要返回值,因为交换后的结果已经存储在指针所指向的地址中了。在调用函数时,需要传入参数的地址,即`&a`和`&b`。
相关问题
#include<stdio.h> int sum(int a,int b); int swap(int a,int b); int main(void) { int a,b,c; int (*p)(int,int); scanf("%d,%d",&a,&b); p=sum; c=(*p)(a,b); p=swap; (*p)(a,b); printf("sum=%d\n",c); printf("a=%d,b=%d\n",a,b); return 0; } int sum(int a,int b) { return a + b; } void swap(int*a,int *b) { int t =*a; *a=*b; *b=t }这串代码怎么修改
这段代码有一处错误,`swap`函数的参数应该是指针类型,而不是整型。修改后的代码如下:
```
#include <stdio.h>
int sum(int a, int b);
void swap(int *a, int *b);
int main(void) {
int a, b, c;
int (*p)(int, int);
scanf("%d,%d", &a, &b);
p = sum;
c = (*p)(a, b);
p = swap;
(*p)(&a, &b);
printf("sum=%d\n", c);
printf("a=%d,b=%d\n", a, b);
return 0;
}
int sum(int a, int b) {
return a + b;
}
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
```
修改后的代码中,我们将`swap`函数的参数类型改为了指针类型,并在调用`swap`函数时传递了`a`和`b`的地址。
#include<stdio.h> int main(void) { int a,b,c,*p; scanf("%d,%d",&a,&b); p=sum; *p(a,b,c); p=swap; *p(a,b); printf("sum=%d\n",c); printf("a=%d,b=%d\n",a,b); } sum(int a,int b,int c) { c=a+b; } swap(int a,int b) { int t; t=a; a=b; b=t ; }这串代码要怎么改
以下是修改后的代码:
```c
#include<stdio.h>
int sum(int a,int b); // 声明sum函数
void swap(int *a,int *b); // 声明swap函数
int main(void) {
int a, b, c;
int (*p)(int, int); // 定义函数指针p
scanf("%d,%d",&a,&b);
p = sum; // 将p指向sum函数
c = (*p)(a,b); // 调用sum函数
p = swap; // 将p指向swap函数
(*p)(&a,&b); // 调用swap函数
printf("sum=%d\n",c);
printf("a=%d,b=%d\n",a,b);
return 0;
}
int sum(int a, int b) { // 修改sum函数
return a + b;
}
void swap(int *a, int *b) { // 修改swap函数
int t = *a;
*a = *b;
*b = t;
}
```
修改的地方如下:
1. 在main函数前面声明sum和swap函数,以便main函数中可以调用。
2. 将指针变量p改为函数指针,可以指向不同的函数。
3. 在调用函数时,使用(*p)(a,b)的形式,表示先通过指针p找到对应的函数,然后再调用该函数。
4. 修改sum函数的参数和返回值,使其能够正确计算a和b的和并返回结果。
5. 修改swap函数的参数为指针类型,以便在函数内部直接修改a和b的值。
阅读全文