史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 一般電腦疑難討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2004-06-20, 08:09 PM   #1
8533667
註冊會員
榮譽勳章
UID - 10869
在線等級: 級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時
註冊日期: 2002-12-13
VIP期限: 2010-04
文章: 71
精華: 0
現金: 173 金幣
資產: 333954 金幣
預設 C語言的問題:如何指標改參考呼叫

/* prog 10-12,將a與b值互換(正確範例) */
#include <stdio.h>
void swap(int *,int *);
int main(void)
{
int a=3,b=5;

printf("Before swap...");
printf("a=%d,b=%d\n",a,b);
printf("After swap...");
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}

void swap(int *x,int *y) /* 將兩數互換 */
{
int temp=*x;

*x=*y;
*y=temp;
return;
}

麻煩那位大大會的!幫我改一下~謝謝
8533667 目前離線  
送花文章: 96, 收花文章: 5 篇, 收花: 7 次
回覆時引用此帖
舊 2004-06-20, 10:26 PM   #2 (permalink)
註冊會員
榮譽勳章
UID - 129497
在線等級: 級別:4 | 在線時長:32小時 | 升級還需:13小時級別:4 | 在線時長:32小時 | 升級還需:13小時級別:4 | 在線時長:32小時 | 升級還需:13小時級別:4 | 在線時長:32小時 | 升級還需:13小時
註冊日期: 2004-05-11
VIP期限: 2010-11
文章: 11
精華: 0
現金: 5513 金幣
資產: 10513 金幣
預設

請試試...

void swap(int&, int& );
int main(void)
{
...
swap(a, b);
...
}

void swap(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
return;
}
Leech 目前離線  
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
舊 2004-06-20, 11:44 PM   #3 (permalink)
註冊會員
榮譽勳章
UID - 10869
在線等級: 級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時
註冊日期: 2002-12-13
VIP期限: 2010-04
文章: 71
精華: 0
現金: 173 金幣
資產: 333954 金幣
預設 是改成這樣嗎?

/* prog 10-12,將a與b值互換(正確範例) */
#include <stdio.h>
void swap(int &, int & );
int main(void)
{
int a=3,b=5;

printf("Before swap...");
printf("a=%d,b=%d\n",a,b);
printf("After swap...");
swap(a,b);
printf("a=%d,b=%d\n",a,b);
return 0;
}

void swap(int &x, int &y) /* 將兩數互換 */
{
int temp=x;

x=y;
y=temp;
return;
}
8533667 目前離線  
送花文章: 96, 收花文章: 5 篇, 收花: 7 次
回覆時引用此帖
舊 2004-06-21, 12:30 PM   #4 (permalink)
註冊會員
榮譽勳章
UID - 129497
在線等級: 級別:4 | 在線時長:32小時 | 升級還需:13小時級別:4 | 在線時長:32小時 | 升級還需:13小時級別:4 | 在線時長:32小時 | 升級還需:13小時級別:4 | 在線時長:32小時 | 升級還需:13小時
註冊日期: 2004-05-11
VIP期限: 2010-11
文章: 11
精華: 0
現金: 5513 金幣
資產: 10513 金幣
預設

嗯...是的...
不過我是憑印象寫的, 沒有實際編譯過
Leech 目前離線  
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
舊 2004-06-21, 01:25 PM   #5 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時
註冊日期: 2002-12-07
文章: 13338
精華: 0
現金: 26438 金幣
資產: 3024298 金幣
預設

就如最後 8533667 所改的沒錯
這裡做一簡單解釋教學:

參考型態的引數 - call by reference:
函數呼叫 swap(i, j) 時, 引數的 傳遞 如同int &x=i; int &y=j;。

void swap(int &x, int &y) {}

main() {
int i,j;
...
swap(i,j);
...
}

解釋:
i、x及j、y 是不同名但同體(x是i的別名);以 地址運算子 & 來 達到 call by reference 的功能

而第一樓 8533667 發表的是
位址呼叫(Call by address) 的引數呼叫
mini 目前離線  
送花文章: 2012, 收花文章: 7997 篇, 收花: 26799 次
回覆時引用此帖
舊 2004-06-21, 05:59 PM   #6 (permalink)
註冊會員
榮譽勳章
UID - 10869
在線等級: 級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時
註冊日期: 2002-12-13
VIP期限: 2010-04
文章: 71
精華: 0
現金: 173 金幣
資產: 333954 金幣
預設

但...我改好後~執行編譯有出現錯誤耶
8533667 目前離線  
送花文章: 96, 收花文章: 5 篇, 收花: 7 次
回覆時引用此帖
舊 2004-06-21, 10:08 PM   #7 (permalink)
註冊會員
榮譽勳章
UID - 129497
在線等級: 級別:4 | 在線時長:32小時 | 升級還需:13小時級別:4 | 在線時長:32小時 | 升級還需:13小時級別:4 | 在線時長:32小時 | 升級還需:13小時級別:4 | 在線時長:32小時 | 升級還需:13小時
註冊日期: 2004-05-11
VIP期限: 2010-11
文章: 11
精華: 0
現金: 5513 金幣
資產: 10513 金幣
預設

引用:
原文由 8533667 所發表
但...我改好後~執行編譯有出現錯誤耶
錯誤的行數及訊息是?
Leech 目前離線  
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
舊 2004-06-21, 11:35 PM   #8 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時
註冊日期: 2002-12-07
文章: 13338
精華: 0
現金: 26438 金幣
資產: 3024298 金幣
預設

我想應該錯在
void swap(int &x, int &y) /* 將兩數互換 */
{
int temp=x;
x=y;
y=temp;
return;
}

首先 return;
不需要
再來
int temp=x;
改成
int *temp=&x;
mini 目前離線  
送花文章: 2012, 收花文章: 7997 篇, 收花: 26799 次
回覆時引用此帖
舊 2004-06-21, 11:37 PM   #9 (permalink)
註冊會員
榮譽勳章
UID - 10869
在線等級: 級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時級別:21 | 在線時長:549小時 | 升級還需:23小時
註冊日期: 2002-12-13
VIP期限: 2010-04
文章: 71
精華: 0
現金: 173 金幣
資產: 333954 金幣
預設

抱歉!~已經沒問題了~謝謝!只是程式執行完後就不見了~
如何加入暫停的程式碼啊?
8533667 目前離線  
送花文章: 96, 收花文章: 5 篇, 收花: 7 次
回覆時引用此帖
舊 2004-06-22, 08:24 AM   #10 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時級別:97 | 在線時長:9842小時 | 升級還需:154小時
註冊日期: 2002-12-07
文章: 13338
精華: 0
現金: 26438 金幣
資產: 3024298 金幣
預設

#include <iostream>
#include <conio.h>

void main()
{

getche();
}
mini 目前離線  
送花文章: 2012, 收花文章: 7997 篇, 收花: 26799 次
回覆時引用此帖
舊 2004-06-22, 01:21 PM   #11 (permalink)
jerryhung
榮譽勳章

勳章總數
UID -
在線等級:
文章: n/a
精華:
預設

哈哈,我剛好最近才看到另一個更妙的方法來SWAP兩個變數哦(而且不用使用第三個暫存變數)
要使用C/C++的Bitwise operator XOR

let's say x = A, y = B
x = x ^ y;
y = x ^ y;
x = x ^ y;


http://www.cs.umd.edu/class/spring20...BitOp/xor.html
http://www.if.uidaho.edu/~bgray/clas.../doc/swap.html

要暫停,可加入下面這行(在Windows下)
system("PAUSE");
 
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 12:44 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1