[英]Why Do I Get Different Memory Addresses For Pointer Passed To Function?
基本上我的問題是,當我運行這兩段代碼時,我得到了不同的內存地址。 僅通過添加&運算符,第一段代碼為rValue提供了一定的內存地址,第二段為rValue提供了不同的內存地址。 為什么會這樣?
#include <iostream>
using namespace std;
int pMem(int *rValue){
cout << "Value of rValue is " << *rValue << endl;;
cout << "Address of rValue is " << rValue << endl;
*rValue = 15;
cout << "Value of rValue now is " << *rValue << endl;
cout << "Address of rValue is " << rValue << endl;
return *rValue;
}
int main() {
int value = 8;
int *pValue = &value;
pMem(&value);
cout << "Value = " << value << endl;
cout << "Address of Value: " << pValue << endl;
cout << "Value at memory address " << pValue << ": " << *pValue << endl;
return 0;
}
第二個代碼塊,這次使用&rValue ...我得到的內存地址與第一個代碼塊不同。
#include <iostream>
using namespace std;
int pMem(int *rValue){
cout << "Value of rValue is " << *rValue << endl;;
cout << "Address of rValue is " << &rValue << endl;
*rValue = 15;
cout << "Value of rValue now is " << *rValue << endl;
cout << "Address of rValue is " << &rValue << endl;
return *rValue;
}
int main() {
int value = 8;
int *pValue = &value;
pMem(&value);
cout << "Value = " << value << endl;
cout << "Address of Value: " << pValue << endl;
cout << "Value at memory address " << pValue << ": " << *pValue << endl;
return 0;
}
甚至指針本身也占用內存並具有與之關聯的地址。
因此&rValue是指針rValue的地址,並且,除非它是指向函數的指針,否則該地址將有所不同。
出現這種現象的原因是指針是按值傳遞的。 換句話說,當您的函數收到像這樣的指針類型的參數rValue
int pMem(int *rValue)
C ++為類型為int*
的全新變量分配空間,並在內存中添加其自己的地址。 此變量從傳遞給pMem
的指針表達式初始化。 除此之外,它是一個單獨的變量,其行為類似於pMem
的局部變量。 特別是,參數本身的任何重新分配都不會對調用方產生影響。
執行此操作時,將打印出該參數變量的地址:
cout << &pValue << endl; // Prints a new address
如果您想查看傳遞給該函數的地址,請打印指針,而不是其地址:
cout << pValue << endl; // Prints the address that you passed
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.