void fun(int **p)
{
int i=100;
int *t=&i;
*p=t;(或p=&t;)
}
int main(int argc, char* argv[])
{
int i=500;
int *p=&i;
fun(&p);
int temp;
temp=*p;
cout<<temp<<endl;
return 0;
}
在fun中对p的两种操作结果,输出结果是一样的吗?我感觉是一样的,但为什么输出结果不同?前一个是100,后一个是500?
{
int i=100;
int *t=&i;
*p=t;(或p=&t;)
}
int main(int argc, char* argv[])
{
int i=500;
int *p=&i;
fun(&p);
int temp;
temp=*p;
cout<<temp<<endl;
return 0;
}
在fun中对p的两种操作结果,输出结果是一样的吗?我感觉是一样的,但为什么输出结果不同?前一个是100,后一个是500?
void fun(int **p)
{
int *i = new int;
p = &i;(*p = i;)
}
//
void main()
{ int i=500;
int *p=&i;
fun(&p);
int temp;
temp=*p;
delete (*p);
cout<<temp<<endl;
return 0;
{
int *i = new int; *i = 100;
p = &i;(*p = i;)
}
//
void main()
{ int i=500;
int *p=&i;
fun(&p);
int temp;
temp=*p;
delete (*p);
cout<<temp<<endl;
return 0;
}
void fun(int **pt)
{
int i=100;
int *t=&i;
*pt=t;(或pt=&t;)
}
来看main中的情形
int i=500;
int *p=&i;//p的值是i的地址
fun(&p);
这时到了fun了,参数pt的值是p的地址.
假设是这句:
*pt=t;//这个可是相当于p=t啊,所以返回后temp是100!!
再看这个
pt=&t;//pt不指向p了,指到别处去了,但是p本身毫无影响,所以temp仍是500
void fun(int **pt)
{
int i=100;
int *t=&i;
*pt=t;
}首先这种写法有问题,i的作用域是函数内部,当函数返回是变量i也被系统释放,i的内容也就不确定了,如果你在main()函数中打印输出不用
int temp;
temp=*p;
cout<<temp<<endl;
而是直接使用 cout << *p << endl;
cout << *p << endl;
cout << *p << endl;
你就会看到结果是不是你所希望的了。所以这样用很不安全,也很别扭。