Cpp:參數(shù)傳遞

引用型形參

利用引用形參耻姥,交換兩個(gè)數(shù)的值

void rSwap(int &v1, int &v2)
{
    int temp = v1;
    v1 = v2;
    v2 = temp;
}

利用引用型的形參,可以解決函數(shù)只能返回一個(gè)值得情況

比如套像,在某個(gè)vector中尋找某個(gè)特定的值景馁,然后返回它出現(xiàn)的位置及出現(xiàn)的次數(shù)

vector<int>::const_iterator findValue(
    vector<int>::const_iterator begin,
    vector<int>::const_iterator end,
    int value,
    vector<int>::size_type &occurs)
{
    vector<int>::const_iterator result_iter = end;
    occurs = 0;
    for (; begin != end; ++begin)
    {
        if (*begin == value)
        {
            // remember first occurrence of value
            if (result_iter == end)
            {
                result_iter = begin;
            }
            ++occurs;
        }
    }
    return result_iter;
}

利用const引用避免復(fù)制

一般的形參傳遞時(shí)需要復(fù)制,引用不需要斥难。當(dāng)使用大型引用形參時(shí)枝嘶,為了避免復(fù)制實(shí)參,使用const引用蘸炸。

bool isShorter(const string &s1, const string &s2)
{
    return s1.size() < s2.size();
}

形參是引用,所以不需要復(fù)制實(shí)參尖奔;形參是const搭儒,所以不能通過該引用形參來修改實(shí)參的值。

傳遞指針的引用

交換指向數(shù)值的指針

void prSwap(int *&v1, int *&v2)
{
    int *temp = v1;
    v1 = v2;
    v2 = temp;
}

vector或其他容器作為形參

為避免直接使用vector等類型做形參提茁,一般使用它們的迭代器淹禾。

void print(    vector<int>::const_iterator begin,
            vector<int>::const_iterator end)
{
    while(begin != end)
    {
        cout << *begin++;
        if (begin != end) cout << " ";
    }
    cout << endl;
}

數(shù)組作為形參

肯定不能直接傳遞數(shù)組,通常使用指針進(jìn)行操作茴扁。而下面三種是等價(jià)的

void print(int *);
void print(int[]);
void print(int[10]);

但是后兩種很容易引起誤解铃岔。下面可以看出是否真的等價(jià)

void printv(const int ia[10])
{
    for (size_t i = 0; i != 10; ++i)
    {
        cout << ia[i] << endl;
    }
}

int v1 = 32, arr[2] = {4, 0};
printv(&v1); //編譯ok, 但會(huì)輸出其他9個(gè)其他的值或者運(yùn)行時(shí)錯(cuò)誤
printv(arr); //編譯ok, 但會(huì)輸出其他8個(gè)其他的值或者運(yùn)行時(shí)錯(cuò)誤

編譯器不會(huì)檢查形參數(shù)組的大小。

通過引用傳遞數(shù)組

一般來講,將數(shù)組作為形參傳遞給函數(shù)都會(huì)被轉(zhuǎn)換為指針毁习,但是數(shù)組的引用不會(huì)智嚷。此時(shí),傳遞的是數(shù)組的引用本身纺且,編譯器會(huì)檢查形參數(shù)組的大小盏道。

void print(int (&arr)[3]);
int i = 0, j[2] = {0, 1};
int k[3] = {0, 1, 2};
print(&i); // error
print(j); // error
print(k); // ok

多維數(shù)組的傳遞

所謂多維數(shù)組,就是數(shù)組的數(shù)組载碌。它的每個(gè)元素就是一個(gè)數(shù)組猜嘱,第二維必須指定

void print(int (matrix*)[10], int row_size);
// 或者
void print(int matrix[][10], int row_size);

matrix 是指向含10個(gè)int值的數(shù)組的指針。

在函數(shù)內(nèi)處理數(shù)組

任何數(shù)組的操作都必須保持在數(shù)組的邊界內(nèi)嫁艇。

有三種常見的方法可以保證這一點(diǎn):

  1. 第一種是在數(shù)組的本身放置一個(gè)標(biāo)記進(jìn)行檢測(cè)數(shù)組的結(jié)束朗伶。如C風(fēng)格的字符串,使用 \0 標(biāo)記表示結(jié)束步咪;
  2. 第二種是傳遞指向數(shù)組的第一個(gè)和最后一個(gè)元素的下一個(gè)位置的指針论皆;
  3. 顯式地傳遞數(shù)組的大小。意思是告訴函數(shù)歧斟,我的大小是多少纯丸;
void print(const int ia[], size_t size)
{
    for (size_t i = 0; i < size; ++i)
    {
        cout << ia[i] << endl;
    }
}

END.


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市静袖,隨后出現(xiàn)的幾起案子觉鼻,更是在濱河造成了極大的恐慌,老刑警劉巖队橙,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坠陈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捐康,警方通過查閱死者的電腦和手機(jī)仇矾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來解总,“玉大人贮匕,你說我怎么就攤上這事』ǚ悖” “怎么了刻盐?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)劳翰。 經(jīng)常有香客問我敦锌,道長(zhǎng),這世上最難降的妖魔是什么佳簸? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任乙墙,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘听想。我一直安慰自己腥刹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布哗魂。 她就那樣靜靜地躺著肛走,像睡著了一般。 火紅的嫁衣襯著肌膚如雪录别。 梳的紋絲不亂的頭發(fā)上朽色,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天,我揣著相機(jī)與錄音组题,去河邊找鬼葫男。 笑死,一個(gè)胖子當(dāng)著我的面吹牛崔列,可吹牛的內(nèi)容都是我干的梢褐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼赵讯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼盈咳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起边翼,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤鱼响,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后组底,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丈积,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年债鸡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了江滨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厌均,死狀恐怖唬滑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棺弊,我是刑警寧澤晶密,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站镊屎,受9級(jí)特大地震影響惹挟,放射性物質(zhì)發(fā)生泄漏茄螃。R本人自食惡果不足惜缝驳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧用狱,春花似錦运怖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溺忧,卻和暖如春咏连,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鲁森。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工祟滴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歌溉。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓垄懂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親痛垛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子草慧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,506評(píng)論 1 51
  • 總體上必須清楚的:1)程序結(jié)構(gòu)是三種: 順序結(jié)構(gòu) , 循環(huán)結(jié)構(gòu)(三個(gè)循環(huán)結(jié)構(gòu)), 選擇結(jié)構(gòu)(if 和 switch...
    靜熙老師哈哈哈閱讀 804評(píng)論 1 20
  • 307、setValue:forKey和setObject:forKey的區(qū)別是什么匙头? 答:1, setObjec...
    AlanGe閱讀 1,525評(píng)論 0 1
  • 當(dāng)我在一篇文章中看到“活的很用力”這幾個(gè)字的時(shí)候漫谷,好像有什么東西戳了我一下,這些字久久揮之不去乾胶。 一直以來抖剿,我都很...
    不愛看書的懶鬼閱讀 330評(píng)論 0 0
  • 母親(五十八) 文||與你相識(shí) 從黑夜逃脫 那些貪婪的睡意 總想讓疲憊的心繳械 一顆心總堅(jiān)強(qiáng)的面對(duì)著 那是從什么地...
    與你相識(shí)_40fa閱讀 112評(píng)論 0 2