おはようございます。いつもお世話になっています。
WindowsのVistaを使っていて、コンパイラはBorland C++です。
char ary[/url] = "ABC";
char (*pz)[4];
pz = &ary;
このとき、char (*pz)[4]はchar *pz[4]と違うのでしょうか?
また、pz = &aryは配列全体へのポインタとあるのですが、これはpz[0] = &ary[0],pz[1] = &ary[1]・・・
pz[3] = &ary[3]と解釈してよろしいのでしょうか?
このpz = &aryの&aryはアドレスを意味しているのでしょうか?
それならば、aryは配列なので、&aryはおかしいのではないのでしょうか?
ポインタについて
Re:ポインタについて
> このとき、char (*pz)[4]はchar *pz[4]と違うのでしょうか?
前者はchar[4]へのポインタ、後者はchar*へのポインタの配列です。
> また、pz = &aryは配列全体へのポインタとあるのですが、これはpz[0] = &ary[0],pz[1] = &ary[1]・・・
> pz[3] = &ary[3]と解釈してよろしいのでしょうか?
違います。
pz[0]または*pzは、aryと同じオブジェクトを指す式になります。
> このpz = &aryの&aryはアドレスを意味しているのでしょうか?
aryのアドレスを取得する式です。
> それならば、aryは配列なので、&aryはおかしいのではないのでしょうか?
おかしくありません。
前者はchar[4]へのポインタ、後者はchar*へのポインタの配列です。
> また、pz = &aryは配列全体へのポインタとあるのですが、これはpz[0] = &ary[0],pz[1] = &ary[1]・・・
> pz[3] = &ary[3]と解釈してよろしいのでしょうか?
違います。
pz[0]または*pzは、aryと同じオブジェクトを指す式になります。
> このpz = &aryの&aryはアドレスを意味しているのでしょうか?
aryのアドレスを取得する式です。
> それならば、aryは配列なので、&aryはおかしいのではないのでしょうか?
おかしくありません。
Re:ポインタについて
たかぎ様、解答ありがとうございます。
>前者はchar[4]へのポインタ、後者はchar*へのポインタの配列です。
char[4]へのポインタは、つまり配列の先頭要素のアドレスを指しているのですよね。この後者のchar*へのポインタが分かりません。
このpz = &aryの&aryはアドレスを意味しているのでしょうか?
これは、aryのアドレスを取得する式とあったのですが、ary配列の先頭アドレスをpzに代入しているのでしょうか?そのような場合、pz = ary か、pz = &ary[0]でないといけないのではないではないでしょうか?
>前者はchar[4]へのポインタ、後者はchar*へのポインタの配列です。
char[4]へのポインタは、つまり配列の先頭要素のアドレスを指しているのですよね。この後者のchar*へのポインタが分かりません。
このpz = &aryの&aryはアドレスを意味しているのでしょうか?
これは、aryのアドレスを取得する式とあったのですが、ary配列の先頭アドレスをpzに代入しているのでしょうか?そのような場合、pz = ary か、pz = &ary[0]でないといけないのではないではないでしょうか?
Re:ポインタについて
>このpz = &aryの&aryはアドレスを意味しているのでしょうか?
&aryもaryもアドレスではあるけど、何の型を指すアドレスかが違っている。
>pz = ary か、pz = &ary[0]でないといけないのではないではないでしょうか?
これでは、先頭の文字のアドレスを入れている。
&aryと&ary[0]はアドレス値は同じだけど、意味が違うからエラーになる。
下のプログラムで2次元配列とポインタ配列の違いの参考になれば
&aryもaryもアドレスではあるけど、何の型を指すアドレスかが違っている。
>pz = ary か、pz = &ary[0]でないといけないのではないではないでしょうか?
これでは、先頭の文字のアドレスを入れている。
&aryと&ary[0]はアドレス値は同じだけど、意味が違うからエラーになる。
下のプログラムで2次元配列とポインタ配列の違いの参考になれば
#include <stdio.h> int main(void) { char ary1[/url][4]={"A","BC","DEF"}; char (*pz1)[4]; pz1 = ary1; printf("%p %s\n",pz1,pz1); pz1++; printf("%p %s\n",pz1,pz1); pz1++; printf("%p %s\n",pz1,pz1); printf("\n"); char *ary2[3]; ary2[0]="A"; ary2[1]="BC"; ary2[2]="DEF"; // char *ary2[/url]={"A","BC","DEF"};これと同じ char **pz2; pz2 = ary2; printf("%p %s\n",*pz2,*pz2); pz2++; printf("%p %s\n",*pz2,*pz2); pz2++; printf("%p %s\n",*pz2,*pz2); return 0; }
インストールについて…
この掲示板を見てゲームを作ろうと思いました。
しかしダウンロードしてみて途中でつまづいてしまったのですが…
ゲームプログラミングの館の入門編0番の
「DxLib_VC2008_and_2005用.sln」を開きます → でつまづいてます。VC++が起動しません…。
なんだか初心者なミスの香りもするのですが…どうすればよいのでしょうか?
環境
[2.1] OS : Windows Vista
[2.2] コンパイラ名 : Visual C++ 2008 Express Edition
DXライブラリ : DxLib_VC2_25b.exe → 解凍して DxLib_VC → DxLib_VC2008_and_2005用.sln はある。
恥ずかしながら、よろしくお願いします。
しかしダウンロードしてみて途中でつまづいてしまったのですが…
ゲームプログラミングの館の入門編0番の
「DxLib_VC2008_and_2005用.sln」を開きます → でつまづいてます。VC++が起動しません…。
なんだか初心者なミスの香りもするのですが…どうすればよいのでしょうか?
環境
[2.1] OS : Windows Vista
[2.2] コンパイラ名 : Visual C++ 2008 Express Edition
DXライブラリ : DxLib_VC2_25b.exe → 解凍して DxLib_VC → DxLib_VC2008_and_2005用.sln はある。
恥ずかしながら、よろしくお願いします。
Re:インストールについて…
うーん…反応無しです…。
基本的にダブルクリックで無反応、
右クリックからのプログラムから開くでも推奨されたプログラムが出て…Microsoft Visual Studio Version Selector となっています。他のプログラム欄は空欄です…。
基本的にダブルクリックで無反応、
右クリックからのプログラムから開くでも推奨されたプログラムが出て…Microsoft Visual Studio Version Selector となっています。他のプログラム欄は空欄です…。
Re:インストールについて…
投稿時間が遅すぎましたね…
この時間まで粘って自己解決しました…。
Vistaが管理者うんぬん…結局よくわからなかったけど…。
まだまだ若いつもりなので知らない事にも時間で戦っていきます…はい。
とはいえまた利用するやもしれないのでその時はどうか皆さんよろしくお願いします。
夜遅くに反応してヒントを下さった pooka さん、ありがとうございました。
この時間まで粘って自己解決しました…。
Vistaが管理者うんぬん…結局よくわからなかったけど…。
まだまだ若いつもりなので知らない事にも時間で戦っていきます…はい。
とはいえまた利用するやもしれないのでその時はどうか皆さんよろしくお願いします。
夜遅くに反応してヒントを下さった pooka さん、ありがとうございました。