前提・実現したいこと
[実現したいこと]
int型の三次元配列(と呼ぶべきかわかりませんが,,)であるdata[3][3][6]の値を
tester[3][3][6]にコピーし,それぞれの値を表示したい.
[前提]
ポインタについて全く理解できていないので,なぜエラーになるか,どのような動きをしているかがわからない.
*と&をつけるべきところがわからない.
発生している問題
表示されたdata[a][b][c]とtester[a][b][c]の値が異なる.
該当のソースコード
C
1#include<stdio.h> 2 3int data[3][3][6];//コピー元の三次元配列 4int **tester[3][3];//コピー先の三次元配列 5 6int main() { 7 for(int i = 0; i < 3; i++){ 8 for(int j = 0; j < 3; j++){ 9 for(int k = 0; k < 6; k++){ 10 data[i][j][k] = i*j + k; 11 } 12 } 13 } 14 int *values;//dataのi行j列の配列をコピーしてtester[i][j]代入するための変数 15 for(int i = 0; i < 3; i++){ 16 for(int j = 0; j < 3; j++){ 17 values = data[i][j]; 18 tester[i][j] = &values; 19 } 20 } 21 22 int a = 1; 23 int b = 2; 24 int c = 5; 25 printf("data : %d\n",data[a][b][c]); 26 printf("tester : %d\n",*tester[a][b][c]); 27 28 return 0; 29}
実行結果
a=1, b=2, c=5にした場合
data : 7 zsh: segmentation fault
a=2, b=2, c=4にした場合
data : 8 tester : 1592313737
補足情報
C言語初心者です.(以前までProcessingを扱っていました.)
ポインタについての理解がないので,用語が不正確であったりコードが不可解であるかもしれません.すみません.
ポインタについての解説でも,どのようにすればうまく実行できるかの説明だけでも構いませんので,
回答よろしくお願いします.
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/09 08:22
2020/09/09 08:36
2020/09/09 08:48
2020/09/09 22:37