enter 發表於 2015-1-4 19:39:38

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

#include <stdio.h>
int main(void)
{
int count;//多維陣列
count=99;//定其中某數的值為99
printf("%d\n",count);//先印出來看對不對?
*(***count+(((3*4+2)*3+1)*6)+4)=123;//用多重指標的方式來更改該元素的值,注意前面用了幾個*,以及如何算陣列裡元素的位置。
printf("%d\n",count);//再印出來看看是否該元素的值被改成123?
return 0;
}

enter 發表於 2015-1-4 19:45:20

當陣列是 count 時,要找count,
就是往後取一位乘,3要乘以4,而非count的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:41

本帖最後由 enter 於 2015-1-5 19:25 編輯

#include <stdio.h>

int main(void){

int x={
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,*(*x+13)); //第二列第三個元素13,x*此時位址,它往後再加13個,然後再全部加上*就是值。
printf("%p %p\n",&x,x+1); //此時x代表x陣列的第一個元素,也是陣列的位址開頭,它加一是指到下一列。
printf("%p %p\n",x,*x); //x和*x都指陣列的啟始位址。
printf("%p %p %p %p\n",&x,*x+1,x+1,&x); //*x此處既然已是啟始位址,它往下加一就是指到下一元素,亦即第二個。但如果x+1則指到第二列,就是&x。

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

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

return 0;
}
頁: [1]
查看完整版本: C多維陣列和指標的複雜範例