c++函數(shù)中的指針參數(shù)與地址參數(shù)區(qū)別介紹
更新時間:2012年11月12日 12:05:20 作者:
c++函數(shù)中的指針參數(shù)與地址參數(shù)區(qū)別介紹;可供參考
比如 一個函數(shù) chat(link &a); chat(ling *a); 前者引入一個地址做形參 是不是可以把一個指針變量p。。 這么用chat(p); 那跟第二個函數(shù) 有什么區(qū)別呢 都是傳地址啊。。 小弟弄不明白~~
chat(int&a); chat(int *a); 這兩個函數(shù)是完全不同意義的東西,你的理解主要是在int&a和int* a這個類型上面。要注意int&和int*是兩個完全不同的類型。int&是引用類型,而int*是指向int類型變量的指針類型。 void chat(int&a) { a=20; } 調(diào)用此函數(shù): int x=100; chat(x); // 此時x的值變?yōu)?0了 如果函數(shù)如下: void chat (int*a) { *a=20; } 調(diào)用: int x=10; chat(&x); //此時x的值也會變?yōu)?0; 這是他們有聯(lián)系的地方,也就是他們都可以在函數(shù)里面改變外面變量的值,但是這兩個的參數(shù)傳遞方式是不一樣的void chat(int&a)這個函數(shù)是引用傳遞,而void chat(int*a);這個函數(shù)是值傳遞(雖然其傳遞的值是地址值,但是還是值傳遞)。 這個引用類型應該怎么理解呢? 我是這樣理解的:int a=100;那么a到底是個什么東西,我們說a使我們定義的一個變量,那么變量又是個什么東西呢,不知道你有沒有想過,我們不談編譯原理,但是你可以將a看成是這么一個東西,a代表了一塊內(nèi)存空間,注意:是一塊內(nèi)存空間,也就是說這一塊內(nèi)存空間可能由一個或多個字節(jié)組成,那么在VC++ 6.0中,int類型的變量占4個字節(jié),所以a代表了4個字節(jié)的連續(xù)的內(nèi)存空間。那么int &b=a;定義了這一句之后,b和a一樣都代表了那4個字節(jié)的內(nèi)存空間了。再看看int *c=&a;此時c是什么呢?c也代表了一塊內(nèi)存空間,在VC ++6.0中int*類型的變量占4個字節(jié)的內(nèi)存空間,所以c代表了一個連續(xù)的4個字節(jié)的內(nèi)存空間,在其內(nèi)部放的值就是a代表的那塊內(nèi)存空間的第一個字節(jié)的地址值。 所以我們向chat(int&a)傳遞參數(shù)的時候例如chat(x)此時a與x同樣代表一塊內(nèi)存空間,而chat(int*a)調(diào)用的時候:chat(&x);此時a里面的值就是&x,也就是x代表的內(nèi)存的首地址。 所以你要明白,他們不是傳遞的都是地址!!!!! 在C++中地址和引用不是一個東西!!!
chat(int&a); chat(int *a); 這兩個函數(shù)是完全不同意義的東西,你的理解主要是在int&a和int* a這個類型上面。要注意int&和int*是兩個完全不同的類型。int&是引用類型,而int*是指向int類型變量的指針類型。 void chat(int&a) { a=20; } 調(diào)用此函數(shù): int x=100; chat(x); // 此時x的值變?yōu)?0了 如果函數(shù)如下: void chat (int*a) { *a=20; } 調(diào)用: int x=10; chat(&x); //此時x的值也會變?yōu)?0; 這是他們有聯(lián)系的地方,也就是他們都可以在函數(shù)里面改變外面變量的值,但是這兩個的參數(shù)傳遞方式是不一樣的void chat(int&a)這個函數(shù)是引用傳遞,而void chat(int*a);這個函數(shù)是值傳遞(雖然其傳遞的值是地址值,但是還是值傳遞)。 這個引用類型應該怎么理解呢? 我是這樣理解的:int a=100;那么a到底是個什么東西,我們說a使我們定義的一個變量,那么變量又是個什么東西呢,不知道你有沒有想過,我們不談編譯原理,但是你可以將a看成是這么一個東西,a代表了一塊內(nèi)存空間,注意:是一塊內(nèi)存空間,也就是說這一塊內(nèi)存空間可能由一個或多個字節(jié)組成,那么在VC++ 6.0中,int類型的變量占4個字節(jié),所以a代表了4個字節(jié)的連續(xù)的內(nèi)存空間。那么int &b=a;定義了這一句之后,b和a一樣都代表了那4個字節(jié)的內(nèi)存空間了。再看看int *c=&a;此時c是什么呢?c也代表了一塊內(nèi)存空間,在VC ++6.0中int*類型的變量占4個字節(jié)的內(nèi)存空間,所以c代表了一個連續(xù)的4個字節(jié)的內(nèi)存空間,在其內(nèi)部放的值就是a代表的那塊內(nèi)存空間的第一個字節(jié)的地址值。 所以我們向chat(int&a)傳遞參數(shù)的時候例如chat(x)此時a與x同樣代表一塊內(nèi)存空間,而chat(int*a)調(diào)用的時候:chat(&x);此時a里面的值就是&x,也就是x代表的內(nèi)存的首地址。 所以你要明白,他們不是傳遞的都是地址!!!!! 在C++中地址和引用不是一個東西!!!
您可能感興趣的文章:
- VC中SDK與MFC的區(qū)別淺析
- c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別
- C與C++ 無參函數(shù)的區(qū)別解析
- 虛函數(shù)與純虛函數(shù)(C++與Java虛函數(shù)的區(qū)別)的深入分析
- c++ 虛函數(shù)與純虛函數(shù)的區(qū)別(深入分析)
- C++中memcpy和memmove的區(qū)別總結(jié)
- 深入分析C++中聲明與定義的區(qū)別
- C++中指針和引用的區(qū)別分析
- C與C++中結(jié)構(gòu)體的區(qū)別
- C字符串與C++中string的區(qū)別詳解
- C/C++動態(tài)分配與釋放內(nèi)存的區(qū)別詳細解析
- C++中繼承與組合的區(qū)別詳細解析
- VC中SendMessage和PostMessage的區(qū)別
相關文章
C++實現(xiàn)LeetCode(210.課程清單之二)
這篇文章主要介紹了C++實現(xiàn)LeetCode(210.課程清單之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08C++ OpenCV單峰三角閾值法Thresh_Unimodal詳解
本文主要介紹了適合當圖像的直方圖具有明顯單峰特征時使用,結(jié)合了三角法的原理而設計的圖像分割方法,感興趣的小伙伴可以了解一下2021-12-12C語言中經(jīng)socket接收數(shù)據(jù)的相關函數(shù)詳解
這篇文章主要介紹了C語言中經(jīng)socket接收數(shù)據(jù)的相關函數(shù)詳解,分別為recv()函數(shù)和recvfrom()函數(shù)以及recvmsg()函數(shù)的使用,需要的朋友可以參考下2015-09-09