重拾指针思想之指针与引用
所谓指针变量就是这个变量所在的内存地址存放的是一个其他变量的地址,这个地址存放的是数据,总结的来说,指针变量存放的是地址,然而他本身也有个地址,所以就存在了指向指针的指针。
何为引用,所谓引用就是两个变量的地址是一样的,当然存放的数据也是一样,说白了就是一个变量有一个小名,这两个名字指的是一个人,当一个变量的值改变,另一个变量的值也同样改变。
我们知道在一个函数的调用过程中,指针的实参向形参传递的是指针变量的值(指针指向的地址),所以形参中指针本身的改变不会影响实参中指针的改变,示例如下。
int *n;
int m=111;void fanc1(int *j)
{
*j = *j+1;
printf("%d\n",*j);
}
void fanc2(int *j)
{
j = n;
printf("%d\n",*j);
}
void main()
{
int k =99;
int *i =&k;
fanc1(i);
printf("fanc1=%d\t%d\n",k,*i);
n =&m;
fanc2(i);
printf("fanc2=%d\t%d\n",k,*i);
}
输出结果如下
当我们需要修改指针时,我们需要向形参传递指针变量本身的地址,即指向指针的指针,或者引用。
总结:形参向实参传递,相当于赋值语句,如果是引用相当于给变量取一个小名。
示例:
int *n;
int m=111;void fanc1(int *j)
{
*j = *j+1;
printf("%d\n",*j);
}
void fanc2(int **j)
{
*j = n;
printf("%d\n",**j);
}
void fanc3(int *&j)
{
j = n;
printf("%d\n",*j);
}
void main()
{
int k =99;
int *i =&k;
fanc1(i);
printf("fanc1=%d\t%d\n",k,*i);
n =&m;
fanc2(&i);
printf("fanc2=%d\t%d\n",k,*i);
fanc3(i);
printf("fanc2=%d\t%d\n",k,*i);
}