ページ 11

ポインタについて

Posted: 2009年7月26日(日) 07:11
by チャッカマン
おはようございます。いつもお世話になっています。
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:ポインタについて

Posted: 2009年7月26日(日) 07:17
by たかぎ
> このとき、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はおかしいのではないのでしょうか?

おかしくありません。

Re:ポインタについて

Posted: 2009年7月26日(日) 08:00
by チャッカマン
たかぎ様、解答ありがとうございます。

>前者はchar[4]へのポインタ、後者はchar*へのポインタの配列です。
char[4]へのポインタは、つまり配列の先頭要素のアドレスを指しているのですよね。この後者のchar*へのポインタが分かりません。

このpz = &aryの&aryはアドレスを意味しているのでしょうか?
これは、aryのアドレスを取得する式とあったのですが、ary配列の先頭アドレスをpzに代入しているのでしょうか?そのような場合、pz = ary か、pz = &ary[0]でないといけないのではないではないでしょうか?

Re:ポインタについて

Posted: 2009年7月26日(日) 08:15
by sizuma
ポインタ演算を行ったときに増減する単位が変わりますね。
配列へのポインタへの加減算は配列単位に。
先頭アドレスへのポインタは要素の型を単位にします

Re:ポインタについて

Posted: 2009年7月26日(日) 10:13
by non
>このpz = &aryの&aryはアドレスを意味しているのでしょうか?
&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;
}

インストールについて…

Posted: 2009年8月08日(土) 01:48
by tejya
 この掲示板を見てゲームを作ろうと思いました。
しかしダウンロードしてみて途中でつまづいてしまったのですが…

ゲームプログラミングの館の入門編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:インストールについて…

Posted: 2009年8月08日(土) 02:13
by pooka
一度スタートメニューからVC++を起動して、
そのあとでDxLib_VC2008_and_2005用.slnを開いてみてください。

Re:インストールについて…

Posted: 2009年8月08日(土) 03:10
by tejya
うーん…反応無しです…。

基本的にダブルクリックで無反応、
右クリックからのプログラムから開くでも推奨されたプログラムが出て…Microsoft Visual Studio Version Selector となっています。他のプログラム欄は空欄です…。

Re:インストールについて…

Posted: 2009年8月08日(土) 05:10
by tejya
投稿時間が遅すぎましたね…
この時間まで粘って自己解決しました…。

Vistaが管理者うんぬん…結局よくわからなかったけど…。

まだまだ若いつもりなので知らない事にも時間で戦っていきます…はい。
とはいえまた利用するやもしれないのでその時はどうか皆さんよろしくお願いします。

夜遅くに反応してヒントを下さった pooka さん、ありがとうございました。