人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C言語初心者です。よろしくお願いします。
下記、param01.cでは
showarray(&name); と
showarray(name); とは

同じ結果が得られます。
文字列ポインタと文字列ポインタのアドレスは同じと考えて良いのでしょうか?
また、これら二つのコードをコンパイルしたときに

param02.c:18: warning: passing argument 1 of 'showarray' from incompatible pointer type

というエラーが出ます。なぜなのか教えていただけないでしょうか?



// param01.c

#include <stdio.h>

int showarray(int *x[]); //関数に値を渡すときは仮引数はポインタにしておく
//今の場合、ポインタのポインタになる。

int main()
{
char *name[]=
{
"Dirac",
"schrodinger",
"Bohr",
"broglie",
};

showarray(&name); // ポインタnameのアドレスを渡す。
showarray(name); // ポインタnameを渡す。

return 0;

}


int showarray(int *x[])
{
int i;

for (i = 0; i < 4; i++)
{
printf("x[%d] = %s?n", i, x[i]);
}

return 0;

}





●質問者: gbs01
●カテゴリ:コンピュータ 学習・教育
✍キーワード:Char C言語 Dirac name Warning
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●30ポイント

文字列ポインタと文字列ポインタのアドレスは同じと考えて良いのでしょうか?

ご質問のケースは、文字列ではなく「配列」ですよね?

結果的に同じになることが多いようですが、すべての環境で同じになるとは言えません(ANSI Cではそこまで規定していない)。


というエラーが出ます。なぜなのか教えていただけないでしょうか?

関数 showarray の引数の型が int *x であるにもかかわらず、char *name を渡しているためです。


参考サイト

◎質問者からの返答

ありがとうございます。

配列のポインタと、配列のアドレスは同じと考えて良いのでしょうか?

エラーの件、理解できました。

ありがとうございます。


2 ● pahoo
●40ポイント ベストアンサー

配列のポインタと、配列のアドレスは同じと考えて良いのでしょうか?

#1の回答にも書きましたが、ポインタの値と配列アドレスの値は必ずしも同じになるとは限りません。

Intel系の環境(WindowsやLinux)であれば同じ結果になることが多いはずですが、他の環境でも同じになる保証はありません。

◎質問者からの返答

回答ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ