作者dmx6 (阿吉)
看板C_and_CPP
标题[问题] 不太懂错在哪 想请问一下指标的问题
时间Tue Sep 1 13:53:19 2009
我不想要主程式里直接宣告一个空间给*a 跟 *b
想要在副程式里再宣告空间给它
请问一下大家我这样写哪边有问题
我实在不太了解...谢谢大家了
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
struct node
{
string name;
node *next;
};
void get_data(struct node *);
int main()
{
node *a,*b,c;
get_data(a);
get_data(b);
cout << "a=" << a->name <<endl;
cout << "b=" << b->name <<endl;
delete a;
delete b;
getch();
return 0;
}
void get_data(struct node *data)
{
node *tmp;
tmp = new node;
cout << "name=";
cin >> tmp->name;
tmp->next=NULL;
data=tmp;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 134.208.2.154
1F:推 holymars:data指标指向新new出来的空间 但是a,b并没有 09/01 14:00
2F:→ holymars:请用call by reference.. 09/01 14:01
3F:推 holymars:或者是把tmp = new node; 改成 data = new node; 09/01 14:02
4F:推 VictorTom:不然就是传a, b的address下去, new完data存会a, b去.... 09/01 14:03
5F:→ VictorTom:很典型的类swap传参数没传对的问题....:) 09/01 14:04
6F:推 VictorTom:3F那样做跟他现在写的似乎没差吧??那样做应该不行@_@" 09/01 14:06
7F:→ dmx6:三楼那个我确定不行 因为我有试过了 还是我的写法不正确 09/01 14:08
8F:推 holymars:要传struct node *& data进去@@ 09/01 14:08
9F:→ dmx6:VictorTom 传AB 的ADDRESS 可以明确一点嘛 有EXAMPLE可以 09/01 14:09
10F:→ dmx6:贴上来给我看一下嘛 因为我真的没头序了 09/01 14:09
11F:→ holymars:你把参数改成struct node* &data再试试看吧 09/01 14:10
12F:→ dmx6:OK了 +& 这样是对的 谢谢大家了 我再看看我是哪边的问题^^ 09/01 14:15
13F:→ holymars:就是call by value/call by reference的问题啊... 09/01 14:16
14F:→ holymars:struct node* 是call by value to pointer.. 09/01 14:17
15F:→ holymars:struct node*& 是call by reference to pointer 09/01 14:17
16F:→ dmx6:我是说我要更去了解 我是哪边不懂啦^^" 这须要一点内化^^ 09/01 14:19
17F:推 IDontBite:你要改变的是pointer,但你给的位址只是pointer所指向的 09/02 09:01
18F:→ IDontBite:node,这样你只能改变node里的资料,却改不了pointer所指 09/02 09:03
19F:→ IDontBite:向的记忆体位址 09/02 09:03