簡體   English   中英

數組標識符和數組標識符地址之間的區別

[英]the difference between array identifier and address of array identifier

我認為以下程序可以清楚地表明我的疑慮,因此我發布了該程序:

 #include <stdio.h>
int main() {

        int a[]={1,2,3,4,5};
        if(&a[0] == a)
                printf("Address of first element of an array is same as the value of array identifier\n");
        if(&a == a)
                printf("How can a value and address of an identifier be same?!");

        return 0;
}

這是輸出的鏈接: http : //ideone.com/KRiK0

如果不是sizeof或一元&運算符的主題,則數組將求值為指向其第一個元素的(非左值)指針。

因此&a是數組a的地址,而a值等於數組中第一個元素a[0]

數組的地址和數組中第一個元素的地址相同並不奇怪(也就是說,即使它們具有不同的類型,它們也指向相同的位置); struct也是如此。 鑒於:

struct {
    int x;
    int y;
} s;

然后&s&s.x指向相同的位置(但類型不同)。 如果轉換為void *它們將比較相等。 這與&a&a[0] (因此只是a )完全相似。

如果我對你的問題正確。 您的int a[]={1,2,3,4,5}; 我相信只存儲元素0的地址,因此可能不需要if(&a[0] == a) c字符串理論指出,不帶括號的數組標識符是字符第一個元素的地址。 程序中未定義“ a”。 它可能會給您一個堆棧錯誤。 我會這樣寫: if(&a == a[]){printf("------"); 這只會將指針的地址與數組的第一個元素的地址進行比較。

C ++在數組引用和指針之間進行隱式轉換。 之前已經被問過很多次了,例如參見這個 SO問題。

在C語言中,您可以比較兩種不同類型的指針,但是編譯器應向您發出警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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