code.club

標題: 多維陣列的指標用法 [打印本頁]

作者: enter    時間: 2015-1-21 23:41
標題: 多維陣列的指標用法
本帖最後由 enter 於 2015-1-22 17:55 編輯

#include <stdio.h>
int main(void){
int x[2][3][4]={
0,10,20,30,  40,50,60,70,  80,90,100,110,
120,130,140,150,  160,170,180,190,  200,210,220,230};

char str[4][3]={"how","old","are","you"};
char *p=&str;

printf("%d \n",  *(**x+1) );//10,*愈多就愈往小陣列靠
printf("%d \n",  **(*x+1) );//40
printf("%d \n",  *(*(*x+1)+0) );//40 請將這種視為+0,才能比較詳細看出內涵
printf("%d \n",  ***(x+1) );//120
printf("%d\n",   *(*(*(x+1) +1)  +2) );//180
printf("%d\n",**(*x+5));//其實這都可以視為一維陣列
printf("%d\n", *(*(*x+2)+2)     );//100

printf("%c %c %c %c %c\n",str[2][2],*(*(str+2)+2),*(str[2]+2),*(p+8)); // r, 但*(str+8)是錯的
printf("%s %s %s %s\n",str,p,str[0]);// p[0]是錯的
printf("%s %s %s\n",str+2,p+2,str[0]+2); // str+2是指從第三個次陣列開始,p+2和str[0]+2則都從第三個元素開始。

return 0;
}
作者: enter    時間: 2015-1-22 21:40
本帖最後由 enter 於 2015-1-22 22:29 編輯

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

int main(void)
{
char str[4][7]={"mary","desk","quit","gold"};
char *p;
int num[2][3][4]={
1,2,3,4,  5,6,7,8,  9,10,11,12,
13,14,15,16,  17,18,19,20,  21,22,23,24};
int *q;
p=str;
q=num; //這裡當成一維陣列的指標變數來想會比較清楚

printf("%c %c %c\n",str[1][3],*(*(str+1)+3),*(str[1]+3)); //k,k,k
printf("%s %s\n",str[2],str+2); //quit
printf("%s %s\n",str[2]+1,*(str+2)+1);//uit
printf("%s %s %s\n",(str[2]+2),*(str+3),str+3);//it,gold,gold
printf("%c %s\n",p[7],p+14);//要注意,用指標變數p來表示,則它的算法會將次陣列中未有元素的空格也一併計算進來


printf("%d %d %d %d\n",num[1][2][1],*(*(*(num+1)+2)+1),*(*(num[1]+2)+1),*(num[1][2]+1));//22
printf("%d",q[8]);//9
return 0;
}




歡迎光臨 code.club (https://code.club/) Powered by Discuz! X3.2