#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)
int* t;只是声明指向一个int; 但t没有指向的int(不像a和b它做).
因此,行为*t是未定义的.
在您的特定情况下,int t;就足够了,随后的代码更改为t = *a等.
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)