如何用一个函数修改另一个函数的值
首先要明确一点,一个函数若是想要修改另一个函数的值,必须向另一个函数中传指针并在该函数中解引用。
下面我们我们以两个数值的交换为例尝试写出修改函数值的正确代码。
void Swap(int *a,int *b)//error
{
int *tmp;
*tmp = *a;
*a = *b;
*b = *tmp;
}
int main()
{
int a=1;
int b=2;
Swap(&a,&b); //传a,b的地址(因为Swap函数定义的是指针变量)
printf("a=%d,b=%d",a,b);
return 0;
}
将该函数编译将会出现程序崩溃现象,因为int *tmp是典型的野指针,用户是没有访问权限的,因此无法解引用。所以我们应直接定义一个int tmp作为Swap函数的交换中间值即可。
void Swap(int *a,int *b)//right
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int a=1;
int b=2;
Swap(&a,&b); //传a,b的地址(因为Swap函数定义的是指针变量)
printf("a=%d,b=%d",a,b);
return 0;
}
野指针:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。
野指针可以定义,但不能访问和赋值。
int *p=(int *)2000;
也属于野指针