C筆記 關於陣列位址 1的含義( a 1)

2021-09-18 06:02:06 字數 772 閱讀 2326

以下c語言指令執行結果是?

int a[5]=;

int *p=(int *)(&a+1);

printf("%d,%d",*(a+1),*(p-1));

輸出為3,9.

解析:*(a+1)其實就是指a[1],輸出為3.

*(p-1)輸出為多少? &a+1不是首位址+1,系統會認為加了乙個a陣列,偏移了整個陣列a的大小(也就是5個int的大小)。所以int*p=(int*)(&a+1);其實p實際是&(a[5]),也就是a+5.原因為何呢? &a是陣列指標,其型別為int(*)[5];(指向含有5個int的陣列), 而指標加1要根據指標型別加上一定的值,不同型別的指標+1之後增加的大小不同,a是長度為5的int陣列指標,所以要加5*sizeof(int),所以p實際是a[5],但是p與(&a+1)型別是不一樣的,這點非常重要,所以p-1只會減去sizeof(int*),a,&a的位址是一樣的,但意思就不一樣了,a是陣列首位址,也就是a[0]的位址,&a是物件(陣列)首位址,a+1是陣列下一元素的位址,即a[1],&a+1是下乙個物件的位址,即a[5]。

對於陣列a

a是陣列首元素的位址;

&a是整個陣列的首位址。二者值一樣,但是意義卻不相同。

陣列名代表整個陣列的時候只有兩種情況:sizeof(陣列名),這裡的陣列名表示整個陣列。&陣列名,這裡的陣列名表示整個陣列。(對上例陣列a,sizeof(a)的值為20,表示整個陣列大小。sizeof(a+0)的值為4,因為類似a+0,a+1等陣列名進行了偏移運算,那麼它就代表指向某個元素的指標)

c語言那些細節之a 1和 a 1的區別

首先a是乙個陣列名,當看到這個a與 a時,一般我們的理解都是這個陣列的首位址。沒錯,如果加上列印的話,確實兩個值是一樣的。不過 a是整個陣列的首位址,a則是陣列首元素的位址,雖然值一樣,但是意義卻不相同。在此之前有必要先看下c程式在記憶體中的分布圖。下面來看乙個例子吧還是。示例 html view ...

關於C語言的筆記1

第一章 1.main 函式的名字,表示主函式。2.void 表示此函式是空型別,執行此函式後不產生乙個函式值,每乙個c語言程式都必須有乙個main函式,由 括起來,也可以包含乙個main函式和若干個其他函式。3.乙個函式名後面必須跟一對圓括號,括號內寫函式的引數名及其型別。如 int max int...

今天關於web的問題 1的含義

1 load on startup元素標記容器是否在啟動的時候就載入這個servlet 例項化並呼叫其init 方法 2 它的值必須是乙個整數,表示servlet應該被載入的順序 2 當值為0或者大於0時,表示容器在應用啟動時就載入並初始化這個servlet 3 當值小於0或者沒有指定時,則表示容器...