C语言中指针的几种正误方式
错误1、
void Swap(int a, int b)//未传指针
{
int tmp = a;
a = b;
b = tmp;
}
此方式在调用函数的进行交换的代码,可以看出,只是单纯的将各自存储的地址进行交换而已。没有进行传指针!
错误2、
void Swap(int* p1, int* p2)//未解引用
{
int* tmp = p1;
p1 = p2;
p2 = tmp;
}
此方式虽然传入的是a和b的地址,但是没有对相应的地址进行操作。没有解引用!
错误3、
void Swap(int* p1, int* p2)//有野指针 tmp的值未初始化
{
int* tmp;
*tmp = *p1;
*p1 = *p2;
*p2 = *tmp;
}
此方式用到了指针传递,也解引用了,但是tmp的值未初始化!
正确方式
void Swap(int* p1, int* p2)
{
int tmp;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
总结
1、一个函数想修改另一个函数的值,必须传指针和解引用
2、野指针、空悬指针:没有访问权限的地址
3、空指针(NULL):表示当前指针无效