作者TKyo (闇黑貴公子)
看板Programming
標題Re: [問題] C跟C++一樣有參照的功能嗎?
時間Sat Aug 16 02:39:36 2008
※ 引述《mingjen8329 (雙面人 )》之銘言:
: 各位大大好,小弟目前用C寫一個程式,想用參照的功能將變數傳遞到函數
: 進而在跳出副函式後可以改變原先所設定的值,(函數間傳遞多個傳回值的問題)
: 卻發現有誤,想說會不會是C並沒有像C++一樣有參照的功能。
: (已知可以用傳址的方式處理)
: 正在學程式的小嫩嫩懇請板上高手解惑
C 語言並不存在 call by address 和 call by reference 的差異性
應該解釋為 call by pointer 和 call by reference 的差異性
而這兩者都屬於 call by address。
1.C++ Sample (call by reference/address)
#include <iostream>
using namespace std;
void swap (int &a, int &b)
{
if (&a != &b)
a^=b^=a^=b;
}
int main(void)
{
int a = 1;
int b = 2;
cout << "Before : a = " << a << ", b = " << b << endl;
swap(a, b);
cout << "After : a = " << a << ", b = " << b << endl;
}
2.C Sample (call by pointer/address)
#include <stdio.h>
void swap (int *a, int *b)
{
if (*a != *b)
*a^=*b^=*a^=*b;
}
int main(void)
{
int a = 1;
int b = 2;
printf("Before : a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("After : a = %d, b = %d\n", a, b);
}
--
私が生存への道は
今も未來も唯一つ
私自身の闇黑のためだ
即ち「ハ・ル・ヒ」
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.168.73
推 mingjen8329:謝謝大大賜教,很詳盡,讓人一目了然 219.68.57.242 08/16 08:53
→ meltice:pointer其實也是一種value 只是它可以模擬 124.29.176.31 08/16 11:29
→ meltice:reference 但是他依然佔用一個空間存位址 124.29.176.31 08/16 11:30
→ meltice:真正的reference本身並不佔任何空間 124.29.176.31 08/16 11:30
→ meltice:reference就等於是原本的那個變數 124.29.176.31 08/16 11:30
推 wu110011:請問這一行a^=b^=a^=b;是什麼意思阿? 140.124.76.243 08/16 18:36
→ TKyo:就是數值互換 220.133.168.73 08/16 18:55
→ H45:自己算,做三次 XOR 之後,數值就會互換了。122.121.180.230 08/17 03:32
→ wacca:a=b時就掛了220.134.217.250 08/17 12:32
推 Dungeon:請人寫比較快。搞這麼多沒意思! 220.140.12.237 08/19 01:00
→ Dungeon:又是開開玩笑 :p 220.140.12.237 08/19 01:00
→ TKyo:哪邊有a=b?? = = 220.133.168.73 08/19 02:34
推 Bencrie:他應該是說a==b時swap不成立吧 140.121.197.32 08/19 11:10
※ 編輯: TKyo 來自: 220.133.168.73 (08/20 01:18)
→ TKyo:謝謝提醒, 加了一行判斷 :) 220.133.168.73 08/20 01:18