2013-07-29 23 views
1

我試了一個代碼,看看&ii之間有什麼區別,如果i是一個數組。我的假設是,i代表數組的起始地址,我不知道如果我打印&i以後會發生什麼。 結果令人驚訝(對我來說),因爲i&i都是數組的起始地址。如果我是一個整數數組,那麼在&i和i之間的C有什麼區別?

#include<stdio.h> 

int main() 
{ 
    char str[25] = "IndiaBIX"; 

    int i[] = {1,2,3,4}; 

    printf("%i\n", &i); 
    printf("%i\n", i); 
    return 0; 
} 

結果將是:

2686692 
2686692 

這是同一個地址。

但是,如果我用一個指針來詮釋:

#include<stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int *j = (int *) malloc(sizeof(int)); 
    *j = 12; 

    printf("%i %i %i\n", *j,j,&j); 
    return 0; 
} 

結果將是:

12 
5582744 
2686748 

在這裏,我認爲首先是內存區域的價值被j,則指出,第二個是j指向的內存區的地址,第三個是指針本身的內存地址。如果我打印i&i,爲什麼&i不是指針i的內存地址?

+0

予解釋的地址,請參閱此[鏈接]: [sizeof(&arr)返回什麼?](http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499)檢查。 –

+0

閱讀[comp.lang.c常見問題](http://www.c-faq.com)的第6部分。 –

回答

2

是啊,我都和我&導致打印相同的答案,但它們並不完全相同,

- >我代表第一個元素命名我數組的地址。
- > & i表示整個陣列的(雖然兩者的值是相同的,它們的類型是不同的)

有關的詳細信息http://publications.gbdirect.co.uk/c_book/chapter5/arrays_and_address_of.html

    int ar[10]; 
        ip = ar;    /* address of first element */ 
        ip = &ar[0];   /* address of first element */ 
        ar10i = &ar;   /* address of whole array */ 
4
int i[] = {1,2,3,4}; 

所不同的是它們的類型,i具有類型整數數組的,&i具有類型整數數組的指針的。

相關問題