当我将参数发送的指针值赋给C中的本地指针时,为什么会出错

NIK*_*WAL 3 c pointers

#include <stdio.h>

void ref(int *a,int *b) {
    int *t;
    *t = *a;
    *a = *b;
    *b = *t;
}

int main() {
    int a = 2, b = 3;
    ref(&a, &b);
    printf("a=%d,b=%d", a, b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 6

int* t;只是声明指向一个int; 但t没有指向的int(不像ab它做).

因此,行为*t未定义的.

在您的特定情况下,int t;就足够了,随后的代码更改为t = *a等.

  • @NIKITAAGARWAL**如果其中一个asnwers有帮助,请点击左侧数字下方的勾选** (2认同)

kir*_*dar 6

int *t;声明像这样的指针不会创建任何内存意味着t什么都没有,访问*t = *a;将给出未定义的行为.在您的情况下,您不需要指向交换两个变量的指针,您只需要正常变量.

void ref(int *a,int *b){    
   int t;
   t=*a;
   *a=*b;
   *b=t;
}
Run Code Online (Sandbox Code Playgroud)