[英]c++ Pointer of pointer gives a value?
我想知道一件事,在長時間使用 c# 后,我試圖記住 c++ :) 還有一件事讓我感到困擾,我不知道為什么會這樣。 指針應該是指向某處內存(它的地址)的東西,指針的指針是指針的地址。 很簡單吧? :D
我們來看看這段代碼:
#include <iostream>
int main()
{
int* TestMas = new int[10]
{
1,2,3,4,5,6,7,8,9
};
for (size_t i = 0; i < 10; i++)
{
printf("%d\t", *(TestMas+i));
}
}
出於某種原因,打印出的是值而不是地址,它應該是 *(TestMas+i) 應該是數組指針的地址,但是如何打印出值而不是地址? 如果我嘗試使用&
取消對指針的引用,則會收到錯誤 xD 它是如何工作的?
TestMas
是一個int *
,或一個整數的地址。 當您將它分配給new int[10]
,您將它指向內存中您保證屬於您的 10個連續整數中的第一個。
因此,當您執行*(TestMas + i)
,您正在執行指針運算,然后取消引用新指針。 請注意,此操作的語法糖將是TestMas[i]
。
如果您只想要地址,您可能打算放棄取消引用。 所以就:
std::cout << TestMas + i;
TestMas
是指向int
的指針,而不是指向指針的指針。 它的類型是int *
。 指向 int 指針的指針將是int **
TestMas + i
也是一個指向int
的指針,指向數組的第 i 個元素。 *(TestMas + i)
正在對該指針調用間接運算符,它返回指針操作數指向的對象或函數,而不是地址。
地址是(TestMas+i)
本身的值。
您可以使用以下方式打印它:
printf("%p\\t", (TestMas+i) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.