**:
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...