目录
在做两数交换时,使用指针来接收需要交换的数是什么情况?以下是我的一些实验结论
正常交换
void swap(int* x, int* y)
{
int temp = 0;
temp = *x;//*x为指针x的解引用操作,表示a的值
*x = *y;
*y = temp;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前a=%d,b=%d\n", a, b);
swap(&a, &b);
printf("交换后a=%d,b=%d\n", a, b);
return 0;
}
空指针
-
情况一:
void swop(int* x, int* y)
{
int* temp = NULL;
*temp = *x;//*x为指针x的解引用操作,表示a的值
*x = *y;
*y = *temp;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:a=%d,b=%d\n", a, b);
swop(&a, &b);
printf("交换后:a=%d,b=%d\n", a, b);
return 0;
}
temp为空指针,空指针执向0地址,该指针为空,是无效的,不能对无效的指针解引用
当它发生解引用时,会发生指针解引用错误。
-
情况二:
void swop(int* x, int* y)
{
int* temp = NULL;
temp = *x;
//在c语言的语法上这种写法是不正确的
//但是在指针变量解引用后,看做一个整形变量放到temp指针中是可以放下的
*x = *y;
*y = temp;
}
野指针
-
情况一:
void swop(int* x, int* y)
{
int* temp;
*temp = *x;
*x = *y;
*y = *temp;
}
系统直接崩溃,因为temp为野指针
野指针,即未初始化的指针,没有访问权限的地址(指针)
-
情况二:
void swop(int* x, int* y)
{
int* temp;
temp = *x;
//在c语言的语法上这种写法是不正确的
//但是在指针变量解引用后,看做一个整形变量放到temp指针中是可以放下的
*x = *y;
*y = temp;
}