指针预习,编写指针交换数值函数。

1int *m=&a,*n=&b的写法错在哪里。
2同样的代码cfree5运行结果和vscode运行结果不一样。
3对于本人写的代码求指教。
4想看高级点的代码,看看大lao的代码咋写的,学习学习。

img

#include
void swap(int *p,int *q)//交换函数 
{
    int t;
    t=*p;
    *p=*q;
    *q=t;
}
int main()
{
    int a, b;
    int * m=NULL, * n=NULL;  //int *m=&a,*n=&b的写法错在哪里。
    m = &a, n= &b;
    a = 1;  
    b = 2;
    printf("%d %d\n", a, b);
    printf("%d %d\n", *m, *n);
    swap(*m, *n);//或swap(&a,&b);
    printf("%d %d\n", a, b);//变量的直接输出
    printf("%d %d\n", *m, *n);//变量的间接访问
    return 0;
}

1.int *m=&a, *n=&b; 这段语句是没有问题的。
2.整个程序应该是有问题的,swap(*m,*n);需要修改为swap(m,n);
因为swap定义的形式参量是指针类型,因此传递进来的必须为指针类型或地址。
以下为修改后的代码,希望对你有用。

  #include<stdio.h>
    void swap(int *p,int *q)//交换函数 
    {
        int t;
        t=*p;
        *p=*q;
        *q=t;
    }
    int main()
    {
        int a, b;
        int *m=&a, *n=&b;  //int *m=&a,*n=&b的写法错在哪里。
      //  m = &a, n= &b;
        a = 1;  
        b = 2;
        printf("%d %d\n", a, b);
        printf("%d %d\n", *m, *n);
        swap(m, n);//或swap(&a,&b);
        printf("%d %d\n", a, b);//变量的直接输出
        printf("%d %d\n", *m, *n);//变量的间接访问
        return 0;
    }

供参考:

#include<stdio.h>
void swap(int *p,int *q)//交换函数 
{
    int t;
    t=*p;
    *p=*q;
    *q=t;
}
int main()
{
    int a, b;
                      //int * m=NULL, * n=NULL;
    int *m=&a,*n=&b;  //的写法错在哪里。这么写没任何问题。
                      //m = &a, n= &b;
    a = 1;  
    b = 2;

    printf("%d %d\n", a, b);
    printf("%d %d\n", *m, *n);

    //swap(*m,*n);这么写是错误的,应改为:
    swap(m, n);
    //或 swap(&a,&b);

    printf("%d %d\n", a, b);//变量的直接输出
    printf("%d %d\n", *m, *n);//变量的间接访问

    return 0;
}

第一点,变量初始化必须要用常量,而不是变量,它必须是一个确定的值,由于程序未运行,所以变量a.b的地址是未知的,你不能用他们去初始化别的变量,第二点,如果两种编译器的结果不一样,那很可能结果是错的,而且输出的结果比较随机,swap调用时应该传入指针,而不是传值,你传的是值。

不知道你这个问题是否已经解决, 如果还没有解决的话:

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