指针变量作为函数的参数时,为什么会出现下面的错误

#指针变量作为函数的参数时,为什么会出现下面的错误

img


```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;
}

这样,程序将能正常运行,并按照先大后小的顺序输出输入的两个数。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^