簡體   English   中英

C++ 指針的指針給出了一個值?

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

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