日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言的指针*和引用

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言的指针*和引用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先是一道關于類型轉換的面試題,要求給出float變量強制轉換成int型和int &輸出的結果。

[cpp] int test()?
{?
??? float a = 1.0f;?
??? cout<<"value of (int)a is "<<(int)a<<endl;?
??? cout<<"value of &a is "<<&a<<endl;?
??? cout<<"value of (int &)a is "<<(int &)a<<endl;?
??? cout<<boolalpha<<((int)a == (int &)a)<<endl;?
??? return 0;?
}?
int test()
{
?float a = 1.0f;
?cout<<"value of (int)a is "<<(int)a<<endl;
?cout<<"value of &a is "<<&a<<endl;
?cout<<"value of (int &)a is "<<(int &)a<<endl;
?cout<<boolalpha<<((int)a == (int &)a)<<endl;
?return 0;
}
以前編程經常用到強制轉換(int)variable,對于上例,就是把float型的值1.0作為int型輸出1,但是如何理解(int &)variable,為什么輸出會是一個大整數1065353216呢?這里需要區分&的兩個作用:取地址和引用。以下是參考CSDN論壇的詳細解釋。
(int)a實際上是以浮點數a為參數構造了一個整型數,該整數的值是1,(int&)a則是告訴編譯器將a當作整數看(并沒有做任何實質上的轉換)。因為1以整數形式存放和以浮點形式存放其內存數據是不一樣的,因此兩者不等。對float b = 0.0f;的兩種轉換意義同上,但是0的整數形式和浮點形式其內存數據是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數值意義上)。
注意,程序的輸出會顯示?? (int&)a=1065353216,這個值是怎么來的呢?前面已經說了,1以浮點數形式存放在內存中,按ieee754規定,其內容為0x0000803F(已考慮字節反序)。這也就是a這個變量所占據的內存單元的值。當(int&)a出現時,它相當于告訴它的上下文:“把這塊地址當做整數看待!不要管它原來是什么。”這樣,內容0x0000803F按整數解釋,其值正好就是1065353216(十進制數)。
通過查看匯編代碼可以證實“(int)a相當于重新構造了一個值等于a的整型數”之說,而(int&)的作用則僅僅是表達了一個類型信息,意義在于為cout<<及==選擇正確的重載版本。

我們再看變量中使用指針*和引用&的例子,&作為引用主要是用在變量的聲明,也就是將此變量作為一個別名,兩變量內存地址完全相同。下面是對int *a, int &b, int * &c, int & *d的實驗和簡單說明。

[cpp] int test()?
{?
??? int i = 10;?
??? int *a = &i;??? /* a是一個指針,指向i的地址, &取地址 */?
??? cout<<"value of a is "<<a<<endl;? /* i的地址 */?
??? int &b = i;???? /* b是引用,和i指向同一地址,可視為i的別名 */?
??? cout<<"value of b is "<<b<<endl;? /* i的內容,10 */?
??? cout<<"value of &b is "<<&b<<endl;??? /* i的地址 */?
??? int * &c = a;?? /* c是引用,引用的類型是指針(和a相同) */?
??? cout<<"value of c is "<<c<<endl;? /* c是a的別名 */?
??? /* int & *d = b;??? d是一個指針,但引用不是實體,所以是錯誤的 */?
??? return 0;?
}


總結

以上是生活随笔為你收集整理的C语言的指针*和引用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。