作者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