code.club

標題: C多維陣列和指標的複雜範例 [打印本頁]

作者: enter    時間: 2015-1-4 19:39
標題: C多維陣列和指標的複雜範例
#include <stdio.h>
int main(void)
{
int count[5][4][3][6];//多維陣列
count[3][2][1][4]=99;//定其中某數的值為99
printf("%d\n",count[3][2][1][4]);//先印出來看對不對?
*(***count+(((3*4+2)*3+1)*6)+4)=123;//用多重指標的方式來更改該元素的值,注意前面用了幾個*,以及如何算陣列裡元素的位置。
printf("%d\n",count[3][2][1][4]);//再印出來看看是否該元素的值被改成123?
return 0;
}
作者: enter    時間: 2015-1-4 19:45
當陣列是 count[5][4][3][6] 時,要找count[3][2][1][4],
就是往後取一位乘,3要乘以4,而非count[5][4][3][6]的5,3*4之後再加2,然後整個結果再乘以下一列的數就是3,變成((3*4)+2)*3,然後再加1,再將結果乘以6變成(((3*4)+2)*3+1)*6再加上最後的4,然後別忘了還要加count本身的一個元素。
*(***count+(((3*4+2)*3+1)*6)+4)
作者: enter    時間: 2015-1-5 18:47
本帖最後由 enter 於 2015-1-5 19:25 編輯

#include <stdio.h>

int main(void){

int x[4][5]={
0,1,2,3,4,
5,6,7,8,9,
10,11,12,13,14,
15,16,17,18,19
};

printf("%d %d\n",x[2][3],*(*x+13)); //第二列第三個元素13,x*此時位址,它往後再加13個,然後再全部加上*就是值。
printf("%p %p\n",&x[1][0],x+1); //此時x代表x陣列的第一個元素,也是陣列的位址開頭,它加一是指到下一列。
printf("%p %p\n",x,*x); //x和*x都指陣列的啟始位址。
printf("%p %p %p %p\n",&x[0][1],*x+1,x+1,&x[1][0]); //*x此處既然已是啟始位址,它往下加一就是指到下一元素,亦即第二個。但如果x+1則指到第二列,就是&x[1][0]。

int y[5]={0,1,2,3,4};

printf("%p %p\n",&y[2],y+2); //此處一維陣列中,第三個元素寫成y+2,其實可視為每一元素就是一列,那就符合多維陣列的邏輯。

return 0;
}




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