こんにちは。お世話になっております。
現在ポインタの勉強をしていますがエラーの意味がわからず質問させていただきました。
#include <stdio.h>
int main(void){
int i, j;
int ma[3][2];
for(i=0; i<3; i++){
for(j=0; j<2; j++){
printf("ma[%d][%d] = %p\n", i, j, &ma[j]);
}
}
printf("\n");
printf("maのアドレス:%p\n", &ma);
int *p_ma;
printf("p_maのアドレス:%p\n", &p_ma);
// (★)
p_ma = &ma;
printf("p_maのアドレス:%p\n", &p_ma);
return 0;
}
(★)の部分で
error C2440: '=' : 'int (*)[3][2]' から 'int *' に変換することはできません。(新しい動作 ; ヘルプを参照)
指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
というメッセージが表示され実行に失敗します。
p_maというポインタを宣言しておいて、maの先頭配列をコピーしようとしているだけですのになぜ失敗するのでしょう。
エラーコメントの意味から判断する力もないので、どなたか助けてください。
ポインタに関する質問です1
Re:ポインタに関する質問です1
>maの先頭配列をコピーしようとしているだけですのになぜ
>p_ma = &ma;
>printf("p_maのアドレス:%p\n", &p_ma);
何をしたいのかちょっと意味がわかりません。
>p_ma = &ma;
>printf("p_maのアドレス:%p\n", &p_ma);
何をしたいのかちょっと意味がわかりません。
Re:ポインタに関する質問です1
>p_maは「int*」です
>&maは「int**」です
>p_ma = ma;が正しいです。
ma は、 int (*)[2] 、&ma は、 int (*)[3][2] です。
したがって、
int (*p_ma)[2];
p_ma = ma;
または、
int (*p_ma)[3][2];
p_ma = &ma;
です。