code.club

 找回密碼
 立即註冊
搜索
查看: 1402|回復: 2

C多維陣列和指標的複雜範例

[複製鏈接]
發表於 2015-1-4 19:39:38 | 顯示全部樓層 |閱讀模式
#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;
}
回復

使用道具 舉報

 樓主| 發表於 2015-1-4 19:45:20 | 顯示全部樓層
當陣列是 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)
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2015-1-5 18:47:41 | 顯示全部樓層
本帖最後由 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;
}
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|Archiver|code.club  

GMT+8, 2019-9-16 06:48 , Processed in 0.108433 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表