新手求问,关于指针问题。
RT.我现在知道&、*,但具体到例子就不太明白是什么意思了。
材料上的几个例子现在有点看不明白。请各位帮忙讲解一下。
Case 1 :
void f(int a)
{
a = 2;
}
void main()
{
int a = 1;
f(a);
printf("%\d", a); /* Print 1 */
}
——————————————————————————————————
Case 2
void f(int &a)
{
a = 2;
}
void main()
{
int a = 1;
f(a);
printf("%\d", a); /* Print 2 */
}
——————————————————————————————————
Case 3
void f(int *a)
{
*a = 2;
}
void main()
{
int a = 1;
f(&a);
printf("%\d", a); /* Print 2 */
}
————————————————————————————————
Case 4
int f(int a)
{
a = 2;
return (a);
}
void main()
{
int a = 1;
a = f(a);
printf("%\d", a); /* Print 2 */
}
请讲解一下这几个小程序的运行流程,以及为什么最后会Print那个数。
谢谢各位了!
还有一个:a=&b相当于a取b的地址,那么取完地址后a里面的东东是b的地址呢还是b的数值?
[解决办法]
楼主的基础很薄弱,看看这个。http://blog.csdn.net/wanjichun/article/details/3279494
[解决办法]
简单的说我是这样理解的
1:main里定义的a和f里面定义的a不是一个a。f里面a的值本来是等于1的然后f函数改变了它的值
2:main里定义的a是f里面定义的a的一个引用。所以通过改变f里面的a可以改变main里面的a
3:main里定义的a和f里面定义的a是同一地址。所以通过改变f里面的a可以改变main里面的a
4:main里定义的a和f里面定义的a不是一个a。int返回的是一个整型,可以发现f里面返回的值是2,而main里面有把这个2赋给了main里面的a所以输出了2.
建议楼主把f里面的a都换成b,可能会更加清楚。
[解决办法]
Case 1 :
void f(int a)
{
a = 2;
}
void main()
{
int a = 1;
f(a); //值传递,子函数中的a的初值为1
printf("%\d", a); /* Print 1 */ //此出的a是主函数中的a,不是子函数中的a
}
——————————————————————————————————
Case 2
void f(int &a) //引用
{
a = 2;
}
void main()
{
int a = 1;
f(a);
printf("%\d", a); /* Print 2 */ //引用的实质是变量的别名,是对同一个内存空间进行操作
}
——————————————————————————————————
Case 3
void f(int *a)
{
*a = 2;
}
void main()
{
int a = 1;
f(&a);
printf("%\d", a); /* Print 2 */ //相当于子函数中的a执行主函数的a,也是对同一内存地址进行操作
}
————————————————————————————————
Case 4
int f(int a)
{
a = 2;
return (a);
}
void main()
{
int a = 1;
a = f(a); //子函数中的a初值为1(值传递),重新赋值更改为2,并返回,并将主函数的a赋值为子函数的返回值2 等价于:int b = f(a); a = b;
printf("%\d", a); /* Print 2 */
}
掌握地址,引用,和普通变量的传递的区别