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