首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手求问,关于指针有关问题

2012-03-31 
新手求问,关于指针问题。RT.我现在知道&、*,但具体到例子就不太明白是什么意思了。材料上的几个例子现在有点

新手求问,关于指针问题。
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 */
}

掌握地址,引用,和普通变量的传递的区别
 

热点排行