2015-04-12 35 views
-3

所有涉及指針的值和地址之間有什麼區別?

int main(){ 
 

 
    int number = 30; 
 
    int* nPointer = NULL; 
 

 
    nPointer = &number; 
 

 
    printf("number:\n"); 
 
    printf("Value of number: %d \n", number); 
 
    printf("Value of &number: %d \n", &number); 
 
    printf("Address of number: %x \n", number); 
 
    printf("Address of &number: %x \n\n", &number); 
 

 
    printf("nPointer:\n"); 
 

 
    printf("Value of nPointer: %d\n", nPointer); 
 
    printf("Value of &nPointer: %d \n", &nPointer); 
 
    printf("Value of *nPointer: %d \n", *nPointer); 
 

 
    printf("Address of nPointer: %x\n", nPointer); 
 
    printf("Address of &nPointer: %x \n", &nPointer); 
 
    printf("Address of *nPointer: %x \n", *nPointer); 
 

 
    return 0; 
 

 

 
}
新手編程!

  1. 我不明白&號碼和nPointer的輸出值之間的差異。他們的意思是什麼?
  2. * p和x的地址?
  3. * nPointer和nPointer之間的區別和& nPointer?

總的來說,它們是如何連接的?顯然他們是如何以及爲什麼?

+1

閱讀一些「相關「側邊欄 –

+0

'%x'中的問題並不意味着你說的意思。它只是一個格式說明符,它無法檢索地址。 –

回答

3

您的大部分代碼都會導致undefined behaviour。使用printf函數,您必須提供與參數類型對應的格式說明符。它不會自動轉換爲您。

此外,大部分文字說明與代碼不符。

這裏是固定的未定義行爲的代碼,並在評註固定:

int main() 
{ 
    int number = 30; 
    int* nPointer = &number; 

    printf("number:\n"); 
    printf("Value of number (base 10): %d \n", number); 
    printf("Value of &number: %p \n", (void *) &number); 
    printf("Value of number (base 16): %x \n", number); 

    printf("nPointer:\n"); 

    printf("Value of nPointer: %p\n", (void *) nPointer); 
    printf("Value of &nPointer: %p \n", (void *) &nPointer); 
    printf("Value of *nPointer (base 10): %d \n", *nPointer); 

    // last section redundant as it prints the same values but with wrong commentary 

    return 0; 
} 

void *是必要的,因爲有不同類型的指針,並%p只知道void *。 (在普通系統上,如果沒有它,可能會逃脫,因爲普通系統對所有指針使用相同的格式)。

&x的值」是指與「x的地址」相同的東西。指針的值是它指向的對象的地址。

0

變量(如int nPointer)存儲在內存中。內存是內存地址的集合。

&數字表示內存中變量'number'的地址。

「nPointer」是一個整數指針,因爲你宣佈它爲「詮釋* nPointer」

整數指針將存儲「整數」變量的地址。

因此,當你這樣做時,'nPointer = &數字',nPointer將存儲變量'數字'的地址。

* p的地址是存儲在p中的值。

* nPointer被讀爲:存儲在nPointer中的地址值。

nPointer是一個正常的整數變量。

& nPointer讀作:可變nPointer的地址

0

假設下面的聲明和初始化:

int number = 30; 
int *nPointer = &number; 

然後滿足下列條件:

*nPointer == number == 30 
nPointer == &number == address of the number variable 
&nPointer   == address of the nPointer variable 
相關問題