作者kira1101 (肉包)
看板C_and_CPP
標題[問題] 結構指標是Call by value ?\
時間Mon Feb 28 17:43:05 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
dev c++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
指標不是應該為call by refence
餵入的資料(Input):
兩個指標,一個矩陣 求最大值與最小值
預期的正確結果(Expected Output):
最大值的指標與最小值的指標能正確地指到 正確的位置
錯誤結果(Wrong Output):
指的位置為初始化的值
程式碼(Code):(請善用置底文網頁, 記得排版)
#include<iostream>
#include <iomanip>
#define SIZE 10
using namespace std;
typedef struct{
int key;
}element;
typedef struct stack *stackPointer;
typedef struct stack{
element data;
stackPointer link;
}stack;
void maxAndmin(stack list[],stackPointer max,stackPointer min);
int main(){
stack list[SIZE]; /*一個stack矩陣*/
stackPointer max,min;
srand(time(NULL));
max=&list[0];min=&list[0];
for(int i=0;i<SIZE;i++){ /*亂數初始化矩陣內容*/
list[i].link=&list[i+1];
list[SIZE-1].link=NULL;
list[i].data.key=rand()%49+1;
}
maxAndmin(list,max,min); /*函式呼叫*/
for(stackPointer i=&list[0];i!=NULL;i=i->link)
cout<<setw(3)<< i->data.key;
cout<<"\n最大值為:"<<setw(3)<<max->data.key;
cout<<"\n最小值為:"<<setw(3)<<min->data.key;
getchar();
}
void maxAndmin(stack list[],stackPointer max,stackPointer min){
for(stack *i=&list[0];i!=NULL;i=i->link){
if((i->data.key) > (max->data.key)){
max=i;
}
if(i->data.key <min->data.key)
min=i;
}
}
補充說明(Supplement):
不知道錯在哪,自己debug的結果感覺是call by value
但指標不是call by refence嗎?
請高手們指點迷津!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.248.222.223
→ james732:但指標不是call by refence嗎? <=答案:不是 02/28 17:53
推 purpose:排版怎麼會亂成這樣 02/28 17:54
→ kira1101:感謝樓上的回答,這個想了一個禮拜,就是不知道哪邊錯了 02/28 17:59
→ james732:改法二才叫做call by reference 02/28 18:00
→ firejox:指標存著變數的位址-->仍然是一個值 02/28 18:09
→ kira1101:能問一下 為什麼第二種改法需要加取址運算子嗎? 02/28 18:10
→ firejox:取出指標的位址 02/28 18:23
→ firejox:也就是說他是指標的指標 02/28 18:24
推 annheilong:二樓會覺得亂是因為有些}位置在偏右的地方嗎? 02/28 18:25
推 purpose:對啊,運算子也都擠在一起,有些地方也少了空格 02/28 18:42