一道c++指针题,高手请进!
int* test(int* c)
{
c=new int(10);
return c;
}
int main()
{
int* gc=0;
int* c=0;
gc=test(c);
cout<<c<<endl;
cout<<gc<<endl;
return 0;
}
问题点数:60、回复次数:14Top
1 楼kingofwang(王中王)回复于 2001-02-16 13:31:00 得分 0
结果应该是C和GC的值相等吧?问题在哪?Top
2 楼xzjxu(糊涂神仙)回复于 2001-02-16 13:42:00 得分 0
语法错!c不能被附值Top
3 楼ed9er(始祖鸟)回复于 2001-02-16 13:51:00 得分 0
这个要是运行了以后不出内存异常访问就奇怪了Top
4 楼ed9er(始祖鸟)回复于 2001-02-16 13:53:00 得分 0
哦,60分啊,你c进去的时候是值传递,出来时main的c值没变,还是0Top
5 楼NowCan(城市浪人)回复于 2001-02-16 13:56:00 得分 0
怎么能对指针直接赋值呢????Top
6 楼ed9er(始祖鸟)回复于 2001-02-16 13:57:00 得分 0
看错了,是c不是*c,不会内存出错Top
7 楼xu_feng(枫子)回复于 2001-02-16 14:22:00 得分 0
c=new int(10);
int 作为一种数据类型,可以定义其它变量的类型,也可以作为一种强制转换函数。
c作为指针类型的变量,在test(int * c)中已经被定义。而c=new int(10)是将动态分配的int(10)的地址传給c,上面的test()函数只是返回int(10)的地址.下面的主程序十分简单。Top
8 楼idealwt(空气鱼)回复于 2001-02-16 14:36:00 得分 0
果然!
加上一句:printf("%d",*gc)
出现了10。Top
9 楼mzikey()回复于 2001-02-16 14:37:00 得分 0
动手不就知道了吗!
c的值还是0
gc的值是分配的新地址
(vc6下)Top
10 楼NowCan(城市浪人)回复于 2001-02-16 14:50:00 得分 0
值不确定Top
11 楼liu_se()回复于 2001-02-16 15:37:00 得分 20
c的值为0,gc为指向10的一个地址。
因为test()是传递值,所以main()中的c不变。
如果是int * test(int*& c),c和gc就相等了。Top
12 楼hello_wyq(半瓶墨水)回复于 2001-02-16 16:24:00 得分 40
我在前人的基础上补充两句:
1)C的值应该是0,而gc的值是指向分配的存储单元的首地址。如果你要传地址也可以如下:
//在此处你的main函数中的test方法应为gc = test(&c);
int* test(int** ptr) {
*ptr = new int(10);
return *ptr;
}
或
int* test(int*& ptr) {
ptr = new int(10);
return ptr;
}
2)这个程序有严重的缺陷,就是内存丢失!一个比较好的办法是:
void test(int* ptr) {
//do something;
}
int main() {
int* c = 0;
int* gc = 0;
c = new int(10);
assert(c != 0);
//do something ;
test(c);
//do something;
delete c;
c = 0;
//do something;
}
不管是编什么程序都应该有一个良好的编程习惯,这样才能在做大东东时不会有太多的隐藏的祸患。上面仅是我的个人意见,如果有什么不对的地方,恳请指教!Top
13 楼cppfan(易得糊涂)回复于 2001-02-16 23:40:00 得分 0
呵呵,那不如改用auto_ptr算了。
#include <memory>
using namespace std;
void test(int* ptr) {
//do something;
}
int main(void){
auto_ptr<int> p(new int(10);
test(p.get());
return 0;
}Top
14 楼Rio(IT工人)回复于 2001-02-23 11:49:00 得分 0
无非是引用参数与内存释放的问题!就这么两件事儿Top




