簡體   English   中英

為什么為傳遞給函數的指針獲取不同的內存地址?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM