ひびろぐ ver.2

Google検索したときの見た目を考慮してブログ名を変更してみた。馬鹿かと阿呆かと。

Archive for 9月 27th, 2008


Twitter Updates for 2008-09-27

  • @showyou 今更だけど、昨夜メッセージもらったときはすでに PC の前にいなかった。 twitter の連絡の確実性ってそんなもんだよねごめん *Tw* #
  • さてちょいと買い物タイム *Tw* #
  • 今夜はめっちゃ寒いなあ *Tw* #
  • ニコ動の時報に民主党小沢とかマジうぜえ *Tw* #
  • ちょいと一風呂のはずが湯船で寝てた。悔しいので goto 布団。 *Tw* #
  • @tokoroten お上に恥ずかしい式を見せられないんだろw *Tw* #
  • いまだニコ動にリメイク版 SO の技集がないのは、やっぱりエミュの問題か *Tw* #
  • @tokoroten CentOS おんりーって珍しいというかどういう状況なのやらって気もするけどね *Tw* #
  • さむい。というか足が冷える。 *Tw* #
  • @tokoroten 低レベルをたたいていなければ割と入ったりするぜ。めんどいかもしれないけど。まぁパッケージシステムは重要だな *Tw* #
  • X40 がニコ動で CPU を 90% 以上もってかれてる。 UMPC 並か。やっぱり動画再生支援がたらんか。 *Tw* #

Powered by Twitter Tools.

完璧に忘れてた,Cの二次元配列の仕様

とりあえず関数を用意する.

C:

  1. void func(int ** val)
  2. {
  3.   int i, k;
  4.   int tmp[N*N];
  5.  
  6.   printf("address\n");
  7.   for(i=0; i<N; i++){
  8.     for(k=0; k<N; k++){
  9.       printf(" %08x", val+i*N+k);
  10.     }
  11.     printf("\n");
  12.   }
  13.   printf("\n");
  14.  
  15.   printf("data\n");
  16.   for(i=0; i<N; i++){
  17.     for(k=0; k<N; k++){
  18.       printf(" %08d", (int)(*(val+i*N+k)));
  19.     }
  20.     printf("\n");
  21.   }
  22.   printf("\n");
  23.  
  24.   for(i=0; i<N; i++){
  25.     for(k=0; k<N; k++){
  26.       tmp[i*N+k] = (int)(*(val+i*N+k));
  27.     }
  28.   }
  29.  
  30.   printf("copied data\n");
  31.   for(i=0; i<N; i++){
  32.     for(k=0; k<N; k++){
  33.       printf(" %08d", tmp[i*N+k]);
  34.     }
  35.     printf("\n");
  36.   }
  37.   printf("\n");
  38. }



メインその1.動的確保する版.

C:

  1. int main(int args, char **argv)
  2. {
  3.   int i, k;
  4.   int **hoge;
  5.   hoge = (int**)malloc(sizeof(int*)*N);
  6.   for(i=0; i<N; i++){
  7.     hoge[i] = (int*)malloc(sizeof(int)*N);
  8.   }
  9.  
  10.   printf("address\n");
  11.   for(i=0; i<N; i++){
  12.     for(k=0; k<N; k++){
  13.       printf(" %08x", &(hoge[i][k]));
  14.     }
  15.     printf("\n");
  16.   }
  17.   printf("\n");
  18.  
  19.   for(i=0; i<N; i++){
  20.     for(k=0; k<N; k++){
  21.       hoge[i][k] = i*N + k;
  22.     }
  23.   }
  24.  
  25.   printf("data\n");
  26.   for(i=0; i<N; i++){
  27.     for(k=0; k<N; k++){
  28.       printf(" %08d", (hoge[i][k]));
  29.     }
  30.     printf("\n");
  31.   }
  32.   printf("\n");
  33.  
  34.   func(hoge);
  35.  
  36.   return 0;
  37. }



メインその2.動的確保しない版.

C:

  1. int main(int args, char **argv)
  2. {
  3.   int i, k;
  4.   int hoge[N][N];
  5.  
  6.   printf("address\n");
  7.   for(i=0; i<N; i++){
  8.     for(k=0; k<N; k++){
  9.       printf(" %08x", &(hoge[i][k]));
  10.     }
  11.     printf("\n");
  12.   }
  13.   printf("\n");
  14.  
  15.   for(i=0; i<N; i++){
  16.     for(k=0; k<N; k++){
  17.       hoge[i][k] = i*N + k;
  18.     }
  19.   }
  20.  
  21.   printf("data\n");
  22.   for(i=0; i<N; i++){
  23.     for(k=0; k<N; k++){
  24.       printf(" %08d", (hoge[i][k]));
  25.     }
  26.     printf("\n");
  27.   }
  28.   printf("\n");
  29.  
  30.   func(hoge);
  31.  
  32.   return 0;
  33. }



実行結果その1.二次元配列がうまく渡らないのでおかしい.

CODE:

  1. >./test1
  2. address
  3.  08070020 08070024 08070028 0807002c
  4.  08070038 0807003c 08070040 08070044
  5.  08070050 08070054 08070058 0807005c
  6.  08070068 0807006c 08070070 08070074
  7.  
  8. data
  9.  00000000 00000001 00000002 00000003
  10.  00000004 00000005 00000006 00000007
  11.  00000008 00000009 00000010 00000011
  12.  00000012 00000013 00000014 00000015
  13.  
  14. address
  15.  08070008 0807000c 08070010 08070014
  16.  08070018 0807001c 08070020 08070024
  17.  08070028 0807002c 08070030 08070034
  18.  08070038 0807003c 08070040 08070044
  19.  
  20. data
  21.  134676512 134676536 134676560 134676584
  22.  00000000 00000025 00000000 00000001
  23.  00000002 00000003 00000000 00000025
  24.  00000004 00000005 00000006 00000007
  25.  
  26. copied data
  27.  134676512 134676536 134676560 134676584
  28.  00000000 00000025 00000000 00000001
  29.  00000002 00000003 00000000 00000025
  30.  00000004 00000005 00000006 00000007


実行結果その2.ちゃんと見える.

CODE:

  1. >./test2
  2. address
  3.  bfedd178 bfedd17c bfedd180 bfedd184
  4.  bfedd188 bfedd18c bfedd190 bfedd194
  5.  bfedd198 bfedd19c bfedd1a0 bfedd1a4
  6.  bfedd1a8 bfedd1ac bfedd1b0 bfedd1b4
  7.  
  8. data
  9.  00000000 00000001 00000002 00000003
  10.  00000004 00000005 00000006 00000007
  11.  00000008 00000009 00000010 00000011
  12.  00000012 00000013 00000014 00000015
  13.  
  14. address
  15.  bfedd178 bfedd17c bfedd180 bfedd184
  16.  bfedd188 bfedd18c bfedd190 bfedd194
  17.  bfedd198 bfedd19c bfedd1a0 bfedd1a4
  18.  bfedd1a8 bfedd1ac bfedd1b0 bfedd1b4
  19.  
  20. data
  21.  00000000 00000001 00000002 00000003
  22.  00000004 00000005 00000006 00000007
  23.  00000008 00000009 00000010 00000011
  24.  00000012 00000013 00000014 00000015
  25.  
  26. copied data
  27.  00000000 00000001 00000002 00000003
  28.  00000004 00000005 00000006 00000007
  29.  00000008 00000009 00000010 00000011
  30.  00000012 00000013 00000014 00000015



もしかするとキャストがおかしいかもしれないけど,とりあえずこんなん.

その1の方ばっか記憶に残ってて,その2みたいに静的ならアドレスが繋がってたり二次元のまま渡して普通に見えるってのを忘れていた罠.


ちょっと音波で首吊ってくる.