首先它是乙個指標,它指向乙個陣列,在32位系統下任何型別的指標所佔記憶體大小都為4個位元組,至於它指向的陣列佔多少位元組,具體要看陣列的大小。總之,陣列指標即為「指向陣列的大小」,例如:int (*p)[4],定義了乙個陣列指標,該指標變數儲存的是乙個陣列的首位址,它可以指向乙個含有4個整型元素的陣列。
(1)對於一維陣列:
int main(void)
; char (*p)[5]=&a;//&a代表的是整個陣列的首位址
//char (*p)[5]=a;這樣是錯誤的,因為a代表第乙個元素的首位址
printf("%c %c %c",**p,*(*p+1),*(*p+3));//輸出:a k g
return 0;
}
說明:a代表的是第乙個元素的位址,即:&a[0],而&a代表的是整個陣列的位址。雖然printf("%p %p",&a,a);輸出的值是相同的,但它們代表的意義不同。a+1代表的是下乙個元素的位址,即&a[1],而&a+1代表的是向後移動5個位元組的位址。這裡為什麼用的二級指標呢?因為p=&a,*p即為第乙個元素的位址,再**p即輸出了第乙個元素。同理,*(*p+1),*(*p+3)輸出第二個元素,第四個元素。
(2)對於二維陣列:
int main(void)
; char (*p)[4]=null;
p=&a[0];
printf("%c %c %s %s\n",*(*p+1),*(*(p+1)+1),*p,*(p+1));//輸出:o r for cr
return 0;
}
說明:二維陣列的傳遞有兩種方式:一種是行指標傳遞,例如上面的**(p=&a[0],p指向了第一行的位址);一種是列指標傳遞(看下面的介紹)。上面**中p代表二維陣列第一行的位址,則*p代表第一行的第乙個元素的位址,*p+1代表第一行的第二個元素的位址,再*(*p+1)則輸出了第二個元素;同理,p+1代表第二行的位址,*(p+1)代表第二行第乙個元素的位址,*(p+1)+1代表第二行第二個元素的位址
首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身的大小決定,每個元素都是乙個指標。總之,它是乙個"儲存指標的陣列"。例如:char *msg=。儲存了兩個指標,第乙個指標指向了字串"sunday",第二個指標指向了字串"monday",sizeof(msg)=8。指標陣列最主要的用途是對多個字串進行處理操作,因為字元指標比二維陣列更快更有效。
(1):
void print(char *arr)
int main(void)
; print(p);
return 0;
}
(2):
void print(char **arr)
int main(void)
; print(p);
return 0;
}
(3):
//如果乙個指標陣列大小不確定,則可以在指標陣列的末尾設定null
char *a=;
void print(char *p)
}
例如:int a[3][4],即定義了乙個三行四列的整型二維陣列。在初始化時候,第乙個中括號的數字可以省略但第二個不可以省略。這些基本知識可以看看大學課本,不再闡述。
int a[3][4];
a:代表a[0]的位址,即:a=&a[0],a[0]代表a[0][0]的位址,即a[0]=&a[0][0];
a+1:代表a[1]的位址,即:a+1=&a[1],a[1]代表a[1][0]的位址,即a[1]=&a[1][0];
a+2:代表a[2]的位址,即:a+2=&a[2],a[2]代表a[2][0]的位址,即a[2]=&a[2][0];
a[i][j]=*(a[i]+j)=*(*(a+i)+j)=(*(a+i))[j]
(1):二維陣列用行指標定義
int (*p)[4]=null;
定義了乙個陣列指標,可指向含有4個整型元素的指標變數。指向二維陣列的行指標,它所指向的二維陣列的每一行有4個元素。
初始化:
p=a;
//或p=&a[0];
p[i][j]或者*(p[i]+j)或者*(*(p+i)+j)
(2):二維陣列用列指標定義
int *p=null;
將這個二維陣列看成乙個一維陣列,具有m*n個元素。
初始化:
p=a[0];
//或p=*a;
//或p=&a[0][0];
*(p+i*n+j)或者p[i*n+j]
char *p1=;
char p2[8]=;
*p1,*(p1+1),*(p1+2):所指向的字串常量是不規則長度的,且sizeof(p1)=12。
p2[0],p2[1],p2[2]所指向的字串都是一定長度的,且sizeof(p2)=24。
指標陣列 陣列指標 二維陣列指標
指標陣列 如果乙個陣列中的所有元素儲存的都是指標,那麼我們就稱它為指標陣列。除了每個元素的資料型別不同,指標陣列和普通陣列在其他方面都是一樣的,下面是 乙個簡單的例子 include int main 也可以不指定長度,直接寫作 int parr 定義乙個指向指標陣列的指標 int parr arr...
二維陣列 指標陣列與陣列指標
一 首先我們從字面意思理解一下什麼是指標陣列什麼是陣列指標 1 指標陣列 本質是乙個陣列,陣列中的每乙個元素是乙個指標。2 陣列指標 本質是乙個指標,而指標指向乙個陣列。二 我們該怎麼區分指標陣列和陣列指標?1 總共有三種表示形式 int p 4 和int p 4 和int p 4 表面看起來是不是...
二維陣列相關(陣列指標 指標陣列)
一維陣列中,int a 5 變數名a就是陣列a首元素位址,是int 型別。a是整個陣列首位址,是指向有5個元素的陣列的指標。二維陣列中,變數名a就是0行起始位址,a 就有轉換到列的意思,就代表0行0列。陣列指標 是乙個指標,其指向的資料型別由乙個陣列構成 將陣列作為乙個陣列型別對待 如 int p ...