全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1528
推到 Plurk!
推到 Facebook!

雙重指標與排序問題

答題得分者是:taishyang
超級賽亞人3
一般會員


發表:38
回覆:53
積分:23
註冊:2007-06-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-09-28 10:50:16 IP:124.8.xxx.xxx 訂閱
我練習用雙重指標結合排序,程式沒有錯誤,但顯示的結果後面有亂碼

不知是哪邊有問題?

[code cpp]
//---------------------------------------------------------------------------
#include
#include

#pragma hdrstop
#define SIZE 6
void strbub(char**, int);
void swap(char**, char**);

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
char *m[SIZE]={"Michael","Bill","Carlson","Stephanie","Joe","Mary"};
int i;

for(i=0;i puts(m[i]);

strbub( m , SIZE);
puts(">>--------------------After Sorting:");
for(i=0;i puts(m[i]);


system("pause");
return 0;
}
void strbub(char **k, int s)
{
int i,j;

for(i=0;i for(j=0;j if( strcmp( *(k j), *(k j 1) ) >0)
swap(k j ,k j 1);

}
void swap(char** a,char** b)
{
char** temp;

*temp = *a;
*a = *b;
*b = *temp;

}
//---------------------------------------------------------------------------
[/code]




附加檔案:4e828b6876259_q.jpg
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-09-28 15:45:31 IP:114.32.xxx.xxx 訂閱
改成
void swap(char** a,char** b)
{
char* temp;
temp = *a;
*a = *b;
*b = temp;
}
超級賽亞人3
一般會員


發表:38
回覆:53
積分:23
註冊:2007-06-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-09-28 16:21:02 IP:124.8.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
改成
void swap(char** a,char** b)
{
char* temp;
temp = *a;
*a = *b;
*b = temp;
}

我改成您說的方式的確可以,但其實我打的那段是書上的,我不太明白
char** temp跟char* temp
為什麼會有那麼大的差別?

taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-09-28 16:23:33 IP:114.32.xxx.xxx 訂閱
單步執行看指標內容你就會知道了 ^^
超級賽亞人3
一般會員


發表:38
回覆:53
積分:23
註冊:2007-06-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-09-28 19:17:30 IP:124.8.xxx.xxx 訂閱

void swap(char** a,char** b)
{
char** temp;
temp = *a;
*a = *b;
*b = temp;
}
我用成上面的方式結果與下面一樣
void swap(char** a,char** b)
{
char* temp;
temp = *a;
*a = *b;
*b = temp;
}

原程式是
[code cpp]
void swap(char** a,char** b)
{
char **temp;
*temp = *a;
*a = *b;
*b = *temp;
}
[/code]

我發現*a與*b原本為"Michael","Bill"
但是經
因此結果才會出錯,雖然知道哪邊有錯,但是我還是不知道*temp = *a之後為什麼兩個都會被改掉成"?@"




rick060
高階會員


發表:2
回覆:112
積分:217
註冊:2009-11-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-10-04 16:38:28 IP:60.250.xxx.xxx 未訂閱
char **temp;

宣告後,temp 沒有初值,意思就是 temp 的值是指到一個任意位址
操作它並不安全,所以會發生"任何"可能的錯誤,你發生的只是其中一種。

現實生活的例子就好比你拿出電話簿,閉著眼睛隨意點,只會點出一個"未知"的目的一樣。
系統時間:2024-04-20 21:12:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!