作者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
1F:推 mingjen8329:谢谢大大赐教,很详尽,让人一目了然 219.68.57.242 08/16 08:53
2F:→ meltice:pointer其实也是一种value 只是它可以模拟 124.29.176.31 08/16 11:29
3F:→ meltice:reference 但是他依然占用一个空间存位址 124.29.176.31 08/16 11:30
4F:→ meltice:真正的reference本身并不占任何空间 124.29.176.31 08/16 11:30
5F:→ meltice:reference就等於是原本的那个变数 124.29.176.31 08/16 11:30
6F:推 wu110011:请问这一行a^=b^=a^=b;是什麽意思阿? 140.124.76.243 08/16 18:36
7F:→ TKyo:就是数值互换 220.133.168.73 08/16 18:55
8F:→ H45:自己算,做三次 XOR 之後,数值就会互换了。122.121.180.230 08/17 03:32
9F:→ wacca:a=b时就挂了220.134.217.250 08/17 12:32
10F:推 Dungeon:请人写比较快。搞这麽多没意思! 220.140.12.237 08/19 01:00
11F:→ Dungeon:又是开开玩笑 :p 220.140.12.237 08/19 01:00
12F:→ TKyo:哪边有a=b?? = = 220.133.168.73 08/19 02:34
13F:推 Bencrie:他应该是说a==b时swap不成立吧 140.121.197.32 08/19 11:10
※ 编辑: TKyo 来自: 220.133.168.73 (08/20 01:18)
14F:→ TKyo:谢谢提醒, 加了一行判断 :) 220.133.168.73 08/20 01:18