#指针变量作为函数的参数时,为什么会出现下面的错误
```c
#include <stdio.h>
//指针变量作为函数的参数
//题目要求 用函数的方式将输入的两个数按照先大后小的顺序输出
int main() {
void swp(int *p1,int *p2);
int a,b;
int *p1,*p2;
printf("please entre a and b\n");
scanf("%d,%d",&a,&b);
p1=&a;p2=&b;
if(a<b){
swp(*p1,*p2);
}
printf("%d,%d\n",*p1,*p2);
return 0;
}
void swp(int *p1,int *p2){
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
你实际上传递的参数为指向的值,传递的不是指针
应该这样写swp(p1, p2);
在声明时 * 表示这是一个指针
在代码中 * 表示取值
swp(*p1,*p2);
->
swp(p1,p2);
【以下回答由 GPT 生成】
问题分析:在调用swp函数时,传递的是指针指向的值(p1和p2),而不是指针本身(p1和p2)。因此,在函数声明和调用时需要作相应的修改。
解决方案:在函数声明和函数调用时,传递指针本身作为参数,而不是指针指向的值。
修改后的代码如下:
#include <stdio.h>
//指针变量作为函数的参数
//题目要求用函数的方式将输入的两个数按照先大后小的顺序输出
void swp(int **p1, int **p2); // 修改函数声明
int main() {
int a, b;
int *p1, *p2;
printf("please enter a and b\n");
scanf("%d,%d", &a, &b);
p1=&a; p2=&b;
if(a<b) {
swp(&p1,&p2); // 修改函数调用
}
printf("%d,%d\n", *p1, *p2);
return 0;
}
void swp(int **p1, int **p2) { // 修改函数实现
int *temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
这样,程序将能正常运行,并按照先大后小的顺序输出输入的两个数。
【相关推荐】