強制型別轉化(陣列名以及陣列名取位址)

2021-07-02 15:47:53 字數 846 閱讀 5445

**:

void main()

; int *ptr0 = &a[0] + 1;

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

int *ptr2 = (int *)((int)a + 1);

int *ptr3 = (int *)(a + 1);

cout<<*ptr0<<" "<

&a[0]+1---->>指標加一:取決於指標的型別,a[0]的型別為int即整型

所以:&a[0]+1 = &a[0]+4,ptr0指向陣列的第二個元素

&a+1   ---->>指標加一:取決於指標的型別,&a是指向陣列的乙個指標

大小為4*4=16個位元組,&a+1 = a+16,所以ptr1指向4的後面的乙個空間

int(a)+1--->>普通加法:先把a的位址強制型別轉化為整型數再加一

(int *)((int)a + 1):把剛求出來的整型值強制轉化為位址(int *)

即指向元素a[0]的第二個位元組,因為指標是int型的,所以結果是

a[0]的後三個位元組,以及a[1]的第乙個位元組

a+1    ---->>陣列名加一:陣列名(指標常量)型別:因為陣列元素是:

int型,所以a也是int型指標,a+1 = a+4,所以指向下乙個元素

看下面一段**:

#includeusing namespace std;

int a[2] = ;

int main()

{ cout<<"a = "<

一般情況

//&a------------->乙個指向陣列的指標

//a ------------->乙個指向a[0]的指標

陣列名和陣列名取位址

在c中,在幾乎所有使用陣列的表示式中,陣列名的值是個指標常量 也就是陣列第乙個元素的位址。它的型別取決於陣列元素的型別 如果它們是int型別,那麼陣列名的型別就是 指向int的常量指標 在以下兩種場合下,陣列名並不是用指標常量來表示,就是當陣列名作為sizeof操作符和單目操作符 的運算元時。siz...

陣列名和陣列名取位址

1 int a 10 2 int p a 3 int q 10 a 第二個為指向陣列的指標.a只是a 0 的位址,a 1就是a 1 的位址了,a是整個a 10 的首位址,是以整個陣列為角度來看,雖然它與a 0 的值相同,但是 a 1就已經增加了10個int型別的位元組的長度了.1 include 2...

陣列名和陣列名的取址

關於陣列名和指標的區別 推薦看這兩篇文章 示例 char a 3 輸出10進製位址 輸出 a 為 2686777 a 為 2686777 a是陣列名,編譯器處理時相當於陣列首元素的位址 a是乙個指向陣列的指標,值為陣列的位址,等於陣列首元素的位址 輸出 a 為 1 a 為 1 a 為 2686777...