中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

C++中引用與const指針與各種傳遞方式的示例分析

這篇文章將為大家詳細(xì)講解有關(guān)C++中引用與const指針與各種傳遞方式的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)是一家專業(yè)提供大關(guān)企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、H5開(kāi)發(fā)、小程序制作等業(yè)務(wù)。10年已為大關(guān)眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

首先我們知道 const int *p 與 int const *p 是一樣的,即 *p 是常量;而 int * const p 跟上面是不一樣的,即 p 是常量;我們知道引用只是一個(gè)別名,與變量共享存儲(chǔ)空間,并且必須在定義的時(shí)候初始化,而且不能再成為別的變量的別名,這讓我們想到什么呢,貌似跟  int * const p   的性質(zhì)很像。

其實(shí)引用的底層就是用const指針來(lái)實(shí)現(xiàn)的。下面舉個(gè)小例子:

#include <iostream>
using namespace std;

void swap(int &x, int &y)
{
  int temp = x;
  x = y;
  y = temp;
}

void swap(int *const x, int *const y)
{
  int temp = *x;
  *x = *y;
  *y = temp;
}

int main(void)
{
  int a = 5;
  int b = 6;
  swap(a, b);
  cout << "a=" << a << " b=" << b << endl;
  int c = 7;
  int d = 8;
  swap(&c, &d);
  cout << "c=" << c << " d=" << d << endl;
  return 0;
}

其實(shí)兩個(gè)swap函數(shù)達(dá)到的效果是一樣的(name mangling),而const 引用如 const int & 呢我們也可以類比為  const int * const p 即既不能成為別的變量的引用,也不能通過(guò)引用更改變量的值。

引用經(jīng)常作為函數(shù)的參數(shù)傳遞,可以與值傳遞,以及指針傳遞做個(gè)比較:

值傳遞: 實(shí)參初始化形參時(shí)要分配空間, 將實(shí)參內(nèi)容拷貝到形參

引用傳遞: 實(shí)參初始化形參時(shí)不分配空間

指針傳遞:本質(zhì)是值傳遞,但如果我們要修改指針本身,那只能使用指針的指針了,即 **, 或者指針引用 *&

而且使用指針比較不保險(xiǎn)的是很多人會(huì)忘記加上const的限制,即很可能接下來(lái)的程序中你又把這個(gè)指針指向了其他的變量,這樣就混亂了。

把引用作為函數(shù)返回值時(shí),千萬(wàn)記得不要返回局部變量的引用,舉個(gè)小例子:

#include <iostream>
using namespace std;


int &add(int a, int b)
{
  int sum;
  sum = a + b;
  return sum;
}

int main(void)
{
  int n = add(3, 4);
  // cout<<"just test"<<endl;
  int &n2 = add(5, 6);
  cout << "n2=" << n2 << endl;
  cout << "n=" << n << endl;
  return 0;
}

在上面的例子中我們返回了局部變量的引用,那么輸出結(jié)果是什么呢?

n2=11
n=7

好像沒(méi)錯(cuò)是吧,再試試,我們?cè)谧詈蠹右粭l語(yǔ)句再打印一下 n2

cout<<"n2="<<n2<<endl;
n2=11
n=7
n2=1474313670

奇怪了,為什么這次打印變成這么大的數(shù)而我們完全沒(méi)更改n2的值?。?見(jiàn)到的不一定是真的啊,不要被它欺騙了,這就是返回局部變量的引用的后果。

其實(shí)函數(shù)返回的是局部變量sum的引用,而 n2 本身又是引用,即引用著原來(lái)sum 擁有的那塊區(qū)域,第一次打印沒(méi)有出錯(cuò)是因?yàn)楸緛?lái)寫在sum 區(qū)域上的值11 尚未被覆蓋,而再運(yùn)行兩條打印語(yǔ)句后再次打印,很可能原來(lái)屬于sum 的區(qū)域變 dirty了,被覆蓋了其他不確定的值,每次打印都不會(huì)是一個(gè)定值。

那 n 呢,對(duì) n 來(lái)說(shuō)即使你最后再打印一下, n 還是等于 7,因?yàn)?n 本身是個(gè)變量,函數(shù)返回時(shí)立馬保存了sum 所屬區(qū)域的值, 除非你對(duì) n 更改,不然 n 在main 函數(shù)堆棧中是不會(huì)變化的,直到函數(shù)退出, 變量釋放。大家要比較清晰的是,局部變量在函數(shù)棧上釋放,但本來(lái)區(qū)域的值第一時(shí)間還是原來(lái)的值,但經(jīng)過(guò)程序運(yùn)行,堆棧內(nèi)存區(qū)域重用, 一般就被覆蓋了。

關(guān)于“C++中引用與const指針與各種傳遞方式的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

文章名稱:C++中引用與const指針與各種傳遞方式的示例分析
網(wǎng)站鏈接:http://www.2m8n56k.cn/article12/ggdgdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、定制開(kāi)發(fā)面包屑導(dǎo)航、營(yíng)銷型網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、網(wǎng)站營(yíng)銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
主站蜘蛛池模板: 欧美黄区 | 午夜两性试爱视频免费 | 国产三级做爰在线观看视频 | 亚洲一区二区久久 | 成年女人免费又黄又爽视频 | 国产毛片一区二区三区精品 | 久久99热精品免费观看欧美 | 午夜成年女人毛片免费观看 | 欧美一级毛片在线看视频 | 久草资源免费 | 国产精品19禁在线观看2021 | 波多野结衣在线播放视频 | 美女张开腿让男人操 | 久久成年人视频 | 亚洲国产激情在线一区 | 又黄又湿又爽吸乳视频 | 亚洲毛片免费在线观看 | 成人在线视频免费观看 | 亚洲三级在线视频 | 美女操穴视频 | 一本久道久久综合婷婷五 | 亚洲在线播放 | 91久久99热青草国产 | 九九在线观看视频 | 欧美日韩亚洲一区二区三区在线观看 | 久久高清免费视频 | 一区二区三区免费视频网站 | 琪琪午夜伦埋大全影院 | 欧美一级欧美一级在线播放 | 中文字幕亚洲精品日韩精品 | 男人在线天堂 | 久夜色精品国产一区二区三区 | 久久e| 一级特一级特色生活片 | 日日狠狠久久偷偷四色综合免费 | 亚洲性网| 九九午夜| 夜夜春夜夜夜夜猛噜噜噜噜噜 | 日韩一级特黄毛片在线看 | 国产精品一在线观看 | 成人中文字幕在线高清 |