ポインタに関する質問です1

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
そーやー

ポインタに関する質問です1

#1

投稿記事 by そーやー » 16年前

こんにちは。お世話になっております。
現在ポインタの勉強をしていますがエラーの意味がわからず質問させていただきました。

#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の先頭配列をコピーしようとしているだけですのになぜ失敗するのでしょう。

エラーコメントの意味から判断する力もないので、どなたか助けてください。

ねこ

Re:ポインタに関する質問です1

#2

投稿記事 by ねこ » 16年前

p_maは「int*」です
&maは「int**」です

p_ma = ma;が正しいです。

non

Re:ポインタに関する質問です1

#3

投稿記事 by non » 16年前

>maの先頭配列をコピーしようとしているだけですのになぜ
>p_ma = &ma;
>printf("p_maのアドレス:%p\n", &p_ma);

何をしたいのかちょっと意味がわかりません。

フリオ

Re:ポインタに関する質問です1

#4

投稿記事 by フリオ » 16年前

 
>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;

です。
 

ねこ

Re:ポインタに関する質問です1

#5

投稿記事 by ねこ » 16年前

何か凄い恥ずかしい間違いをしてるorz、一次でもint**じゃなくint *[2]ですよね。
No:35681は無かったことにしてください(汗)

閉鎖

“C言語何でも質問掲示板” へ戻る