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ū)別
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)之簡易計算器
這篇文章主要為大家詳細介紹了C語言數(shù)據(jù)結(jié)構(gòu)之簡易計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
C++ 繼承,虛繼承(內(nèi)存結(jié)構(gòu))詳解
C++繼承和虛繼承的內(nèi)存模型是一個老生常談的話題,實現(xiàn)方法主要依賴于編譯器,本文從多個角度通過代碼詳解C++中虛繼承的內(nèi)存模型知識,感興趣的朋友跟隨小編一起看看吧2021-09-09
C語言實現(xiàn)從文件讀入一個3*3數(shù)組,并計算每行的平均值
今天小編就為大家分享一篇C語言實現(xiàn)從文件讀入一個3*3數(shù)組,并計算每行的平均值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12

