[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 04/25 21:15 / Filesize : 282 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 2



1 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:02:46 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/


266 名前:126 mailto:sage [2007/06/13(水) 15:55:26 ]
>>246
どうやら察しの悪い人のようなので、諦めて、答えを書くよ。

単体のコンパイラやなどのCUIの実行ファイルを、
エクスプローラ上でダブルクリック(設定によってはクリックか)して実行すると、
プログラムが終了し次第、ウィンドウが閉じられてしまうのは、
Windowsの(エクスプローラの)仕様です。

コマンドプロンプトを開いて、
そこからコンパイラや、作ったプログラムを実行させればいい。

それでも、あっという間にスクロールして見えなくなるので、
コマンドプロンプトのウィンドウの左上のアイコンを右クリックして出てくるメニューから、
プロパティを開いて、タブのレイアウトで、画面バッファのサイズの高さを、数百くらいにするといい。

> 最後の「7」はバグなんですか?

コンピュータで小数がどのように扱われるのか勉強しよう。


267 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:03:41 ]
>>249
C言語のポインタくらいで、つまずくようでは、先が思いやられる。

世の中には、C言語のポインタで つまずく人が大勢いるが、
決して、C言語のポインタが難解なのではない。

その本が前提としている知識を持ち合わせていないため、本に書かれていることが理解不能
とか、
その本の説明が悪くて、著者本人か、すでに理解している人にしか、理解不能

いずれにしても、本のチョイスの問題です。
前提知識がないのであれば、それを学ぶために別の本を予め読むのも含めてね。

それから、本に書いてあることを読んだだけでは、はっきりとは理解できないこともあるので、
実際にプログラムを書いて、デバッガ上でステップ実行して確かめるのも大切なことです。

268 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:05:39 ]
>>254
スレ違い。

ちなみに、
ボタンの押下に対するハンドラは、速やかに制御を返すべき。
時間のかかる処理を、そのコンテキストでやってはいけない。

269 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:09:24 ]
>>257
本当かどうか、自分で試してみればいいじゃないか。

まぁたぶん本当だろうね。
C++のストリームのライブラリがスタティックリンクされれば、
mainにたった1行でも、かなりのサイズになる。

>>261
スレッドの話はスレ違い。

C/C++は基本的にスレッドの面倒を見ません。
マルチスレッド対応といっても、複数のスレッドからライブラリ関数を呼ぶことができるようになっているだけです。

だから、OSのスレッドの機能の勉強をしてください。

270 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:31:45 ]
>>262,>>269
申し訳ない
出直してくる

271 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 21:03:47 ]
みんなガンバレ!

言葉はキツいが諸先輩方は応援してるぞ。

272 名前:デフォルトの名無しさん [2007/06/14(木) 00:19:17 ]
getchar();で入力された英字の他に改行コードも一緒にラインバッファに保存され
次の入力で改行コードが返されてしまう問題で、ラインバッファに保存されてる改行コードをクリアする方法
はありませんか?

for(i=0;i<10;i++){

ch = getchar();

printf("%c\n",ch);

ch = 改行コードをクリア

}

こんな感じで
とりあえず今は下のような感じで対処してるのですが、他に方法があったらお願いします
ちなみに入力関数はgetchar();のみしか使用できません

for(i=0;i<10;i++){

ch = getchar();

printf("%c\n",ch);

ch2 = getchar();

}

273 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:18:02 ]
無理

274 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:37:04 ]
>>272
いまどき、CUIでインタラクティブなプログラムを作るのに慣れたところで、大して役に立たないと思うが・・・

自分なら、とりあえず、こうする。

for(i=0;i<10;i++){

do {
ch = getchar();
} while ((ch == '\r')||(ch == '\n')) ;

printf("%c\n",ch);

}




275 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 11:01:35 ]
>>272 >>274
言わないと気づかないだろうたからあえて言うが、無駄な改行はやめてくれ。
見づらい。

276 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 11:42:36 ]
>>275
改行にも意味があるのだが。

277 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 11:44:38 ]
レスの改行? \n のこと?

278 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 14:48:21 ]
レスの空行に決まってるだろ。

279 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 14:51:50 ]
だったら意味無い気が。ソースの空行だべ

280 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 14:56:09 ]
>>276 のいう「意味」とやらを訊こうか。
いや引っ張る程の話じゃないから、やっぱりいいや。

281 名前:274 mailto:sage [2007/06/14(木) 16:35:11 ]
え、改行が多すぎる?

1行毎に改行を入れているつもりではないけど、結果的に、そうなっちゃってるねぇ。


282 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 16:39:45 ]
多すぎるよ。意味の区切れでもないのに空行なんか要らない。

283 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 17:35:12 ]
こまけーw

284 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 22:29:39 ]
>>274
個人的にはインデントが無い前提なら、このぐらいの空行のが見やすい。
まぁ人それぞれじゃね?



285 名前:デフォルトの名無しさん [2007/06/14(木) 23:15:35 ]
TSearchRec Sr;
int Attributes = faAnyFile;//検索対象とするファイルの属性
if (FindFirst(CDirectoryOutline1->Directory+"\\*.mp3", Attributes, Sr) == 0) {
do {
if ((Sr.Attr & Attributes) == Sr.Attr) {
ListBox1->Items->Add(Sr.Name);

//Sr.Sizeでファイルのサイズを取得できる
i=i+1;
max=i;
}
}while (FindNext(Sr) == 0);
FindClose(Sr);
}

環境
Windows XPsp2
C++Buileder6.0

CDirectoryOutlineで選択したフォルダ内にあるmp3ファイルのファイル名をListboxに表示させたいと思っているのですが、

ファイルを選択→右クリック→プロパティ→全般タブ→詳細設定
の、
「内容を圧縮してディスク領域を節約する」
にチェックの入っているファイルが表示されません。

分かる方いましたら解決方など教えてくださいm(__)m

286 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:17:23 ]
VC++.NET2003を使っています。

CPointをint型に入れたいのですがどのようにすればよいのでしょうか。
どうか、教えてください。

287 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:21:06 ]
CPoint pt(10, 20);
int n = pt.x << 16 | (0xFFFF)pt.y;

288 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:21:25 ]
無理言うな

289 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:22:03 ]
ちがった、こうやりたかった。
int n = pt.x << 16 | (0xFFFF & pt.y);


290 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:23:27 ]
CPoint pt;

int x = pt.x;
int y = pt.y;

291 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:27:13 ]
>>287
>>288
>>289
>>290
ご返答、ありがとうございます。

あの、int x=みたいな初期値を設定するようなやり方じゃなければ
入れることが出来ないのでしょうか?

292 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:34:31 ]
そんなことは無い。
単に変数宣言せずに書くのが嫌で、
2行に分けるのが面倒だっただけだと思うが。

293 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 00:33:24 ]
>>292
そうでしたか。
ここまでのお付き合い、本当にありがとうございました。

294 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 01:01:20 ]
最近C++の勉強をはじめたのですが、どうもCのような設計になりがちで困ってます。
クラス内で作成する関数なんですけど、良く使うキー情報は関数にパラメータを増やして
渡すやり方はC++ではあまりしないんですかね?
クラスのメンバ変数にすると便利そうなんですが、知らないうちにメンバ変数が
どんどん増えていって、収拾がつかなくなることが多くついついパラメータ渡しに
なってしまいます。いまのやり方はまずいですかね?




295 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 02:06:08 ]
・まずはどういう処理について述べているか、具体的に(例でもいいから)挙げてください
・クラス内で作成するって何を作成する関数なんですか?
・キー情報って何ですか?

296 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 03:17:47 ]
>>285
まずは、デバッガ上でステップ実行しろ!

このスレで何度も言っているが、

書いたプログラムが思い通りの結果を出さない場合、
たいていは注意深くステップ実行する(変数の内容もチェックする)ことで間違いに気がつく。

ということで、原因はわかるが、あえて、教えない。
他の人も教えるなよ!

297 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 03:25:29 ]
>>294
> 良く使うキー情報は関数にパラメータを増やして渡すやり方

そういうのはCでも、やらないなぁ。
構造体のポインタを渡すよ。

もし、複数の関数で、同じ引数群を渡すのなら、
どうせスタックに同じものを積むのだから、構造体で値渡しするよ。

構造体を使うにしても、1つの構造体にフラットにメンバを並べるのではなく、
データどうしの関係に合わせて、構造体をネストする。

そういうのはCとC++で違いはないよ。


298 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 06:11:00 ]
入力された数値がマイナス数値だった場合それを自然数に変えるにはどうやるんですか?

299 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 06:32:40 ]
入力した数値を2に変える。3でも良いけど。

300 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 09:41:16 ]
オレだったら4かな、、、って
abs()の事を聞いてるのか?

301 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 11:13:42 ]
>>298
何をしたいのが不明瞭。

このスレで質問する人は、C/C++が云々という以前に、日本語が不自由すぎる。

302 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 15:10:46 ]
わかるように書いて質問すれば、
より早く適切な答えを貰えるのにね。

303 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 15:13:26 ]
自分でも何をしたいのか分かってないんだろ。
この程度のレベルなら、人に説明できれば自ずから解決できる。

304 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 15:28:30 ]
プログラミング云々という以前に、
問題を切り分ける気がないんだろう。

たとえば>>285みたいなのは、
問題を切り分けていけば、
おのずと原因がわかるのだが。



305 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 15:29:18 ]
int a;

scanf("%d",&a);
if(a < 0)
a = 2;

もしくは

int a;

scanf("%d",&a);
while(a < 0)
a++;

ってこどだろ?

306 名前:298 mailto:sage [2007/06/15(金) 15:54:33 ]
5が入力されたら5
マイナス5を入力されても5として扱う方法を聞こうと思ったんですが、、
自分にレスしてくれたんじゃないかもしれないけど305をヒントにできました。

307 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:01:25 ]
そういうのを絶対値と呼ぶんだってことは中学生でも知ってそうなもんだがな

308 名前:298 mailto:sage [2007/06/15(金) 16:03:48 ]
小学生ですが何か?
来年から中学ですけど


309 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:05:41 ]
入力した負の数に-1かけりゃいい話だがや


310 名前:298 mailto:sage [2007/06/15(金) 16:10:17 ]
だから、もうわかったって言ってるだろ
しつこい馬鹿

311 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:11:54 ]
しつこい馬鹿

312 名前:デフォルトの名無しさん [2007/06/15(金) 16:24:31 ]
変数を宣言して初期化する場合、普通は

int a,b,c;
a=1;
b=2;
c=3;

ってやるけどさ
↓こうした方がコンパイラも高速なコード生成できるし入力数も少なく見やすくてよくね?

int a=1,
  b=2,
  c=3;



313 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:27:36 ]
>>312
天才

314 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:42:21 ]
>>305
intが32ビットや64ビットで、
負の最大値のような巨大な数字が入力されたら、
大変だぞ。

>>306
とりあえずC標準ランタイムライブラリのabs()を使ってみようよ。

>>308
高校生くらいまでは、
プログラミングよりも学校の勉強とかに時間を使ったほうがいいぞ。

プログラミングなんて大人になってからやっても遅くはないが、
子供のころに勉強することは、大人になってからでは遅いんだよ。

自分も小学生の頃からプログラム書いてたけど、
もっと数学や物理をよく勉強すれば良かったと後悔してるよ。

>>309
今は乗算のコストが加算と同じだけどさ、

普通は減算を使って
if (a < 0) a = 0 - a ;
とやるよね。

>>310
うわぁ。
プログラミングの勉強よりも、対人コミュニケーションの勉強しようよ。




315 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:49:25 ]
>>312
コンパイラの最適化を有効にしていれば、
どっちでも同じコードが出力されると思うぞ。

ちなみに、
int a, b, c ;
というように複数をまとめて宣言するのは、
int* p, q, r ;
のようなトラブルを起す可能性があるので、良くない。

面倒でも、
int a = 1 ;
int b = 2 ;
int c = 3 ;
としたほうがいい。

316 名前:デフォルトの名無しさん [2007/06/15(金) 19:17:02 ]
>>126>>266
ありがとうございます。書くの遅くなりましたが解決できました。本の後ろの方に書いてありました。
回答ありがとうございました。

「7」についてなんですが、本には「0」って書いてあるんです。
でも実行ファイルにすると「7」と表示されるんでバグなのかな?って思って聞いてみました。

317 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 19:59:47 ]
>>316
ライブラリの実装の違いかもしれない。

いずれにしても、
floatやdoubleは内部では二進数なので、
10進数との相互変換は100%完璧にはできない。

318 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:08:58 ]
>if (a < 0) a = 0 - a ;
if (a < 0) a = -a;

319 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:19:18 ]
マイナスを前に付ければ符号反転なんだけどさ、
算数的には、0から引いたほうが、わかりやすいっしょ。

いまどきのコンパイラは、両者で出力するコードが変りはしないし。

320 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:27:49 ]
>算数的には、0から引いたほうが、わかりやすいっしょ。
  ??????

321 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:28:13 ]
どっちでもいい

322 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:29:38 ]
算数的ではなく314的だろ

323 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 06:36:33 ]
314のマスターベーションだろ?

324 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:13:26 ]
じゃ結論はこうってことで、 a * -1



325 名前:285 [2007/06/16(土) 17:18:08 ]
do while 内のifを外したところ解決しました。
お騒がせしましたm(__)m

326 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:20:55 ]
>>325
>>296の言うとおり、デバッガ使った?

327 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:23:13 ]
>>325
一応聞いておくけど、なんでifを外せばいいのかは理解してるんだよね?
というか、ifを外して良いのか?
バグを修正すべきなんじゃないのか?w

>if ((Sr.Attr & Attributes) == Sr.Attr) {
この式、変じゃない?
Attributesと&取ってて、その結果が Sr.Attrであるためには、
Sr.Attr == Attributesでなくてはならないのでは?

328 名前:デフォルトの名無しさん [2007/06/16(土) 17:27:51 ]
while(gets(str);strcmp(str,"quit"); )

って書き方はありですか?


329 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:29:36 ]
間違えました

for(gets(str);strcmp(str,"quit"); )

でした
for文しか使えなかった場合の話で


330 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:29:41 ]
なしです。
こうしてください。

while(fgets(str, sizeof(str),stdin) && strcmp(str,"quit") )

331 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:31:29 ]
for(fgets(str, sizeof(str), stdin); str&&strcmp(str,"quit");fgets(str, sizeof(str), stdin) )


332 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:32:55 ]
ちがった、こうかな。
for(fgets(str, sizeof(str), stdin);EOF!=*str&&strcmp(str,"quit");fgets(str, sizeof(str), stdin) )


333 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:34:49 ]
>>330
出来るだろうけど、fgetsは改行コードまで取るから、
"quit"に改行コード入れるか、strncmp使うか、
何かしないと狙い通りに動かんと思うよ

334 名前:296 mailto:sage [2007/06/16(土) 18:45:16 ]
>>325
解決してよかったね。

ちなみに今回の質問の件とは違うが、まだバグが残ってる。
ディレクトリ名の末尾が.mp3の場合もファイルとして扱ってしまう。
int Attributes = faAnyFile ;

int Attributes = faAnyFile ^ faDirectory ;
にして、ディレクトリ名は取得しないようにしたほうがいい。


>>327
条件文自体は間違ってないよ。

(Sr.Attr & Attributes) == Sr.Attr
というのは
(Sr.Attr & ~Attributes) == 0
と同じことだからね。

適当にテストプログラムを書いてステップ実行して、
TSearchRec::Attrに渡される値をみてみなよ。
Borland氏ね!と叫びたくなること請け合いだよ。




335 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 19:00:59 ]
>(Sr.Attr & Attributes) == Sr.Attr
>というのは
>(Sr.Attr & ~Attributes) == 0
>と同じことだからね。

本当に?
(Sr.Attr & Attributes) == Attributes
ではなくて?

336 名前:296 mailto:sage [2007/06/16(土) 19:20:10 ]
>>335
ごめん、間違ってた。その通りです。

だがしかし、
(Sr.Attr & Attributes) == Attributes

(Sr.Attr & Attributes)
に直しても、問題は解決しないのよ。

VCLの定数faAnyFileは0x3Fで、
TSearchRec::Attrに返される値は
圧縮ファイルの場合には0x800がORされているから。

faAnyFileを-1に変更するか、
0x3Fを指定された場合にはVCLのリファレンスヘルプに書いてない隠しビットフラグ0x800を立てるのをやめるか、
どっちかにしてほしいぞ > Borland

FindFirstがフィルタしてるんだから、自前でもう一度フィルタしようとするのが変といえば変なのだが。

337 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 19:38:56 ]
いやあのね、それ、DOSの頃からのファイル属性の仕様だから(無属性が通常ファイルは)。
VCL上だけ変えたら、よけい混乱する人が続出するだけ。

338 名前:296 mailto:sage [2007/06/16(土) 22:06:28 ]
>>337さんの書き込みを見て気がついた。

> ごめん、間違ってた。その通りです。
↑は前言撤回。
やっぱり間違っていなかった。

>>327>>335が間違ってる。


339 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 22:23:05 ]
>>337
(Sr.Attr & Attributes) == Sr.Attr
(Sr.Attr & ~Attributes) == 0
これらは、無属性の通常ファイルの場合も、真になるよ。

フィルターとしては、
指定した属性以外がついているファイルを除外する
ということになる。


340 名前:298,306 mailto:sage [2007/06/17(日) 04:47:51 ]
>>314
やっぱりあったんですか・・。絶対値って言葉が出てきませんでした。
教えていただきありがとうございます。
自分は308ほど若くは無いですが、高校生くらいまでは学校の勉強に集中するのは同意します。
ていうか小学中学の時点でプログラム組めるとそれで数学やっちゃいそうで計算力が多分付きませんね。
プログラムは半年くらいしかまだやってないですけど、
プログラム以外の事も覚えなきゃなぁ〜とは思っています。。

341 名前:デフォルトの名無しさん [2007/06/17(日) 11:10:21 ]
Windows Vista にて
普通のサーバープログラムを sexe でサービスに入れたのですが
通知領域(タスクトレイ)にアイコンが表示されません。
サーバー機能は問題なく動作しているようです。
もちろん「ディスクトップとの対話をサービスに許可」していますし
Shell_NotifyIcon のタイムアウト処理も行い
msgTaskBarRestart によるタスクトレイ再登録も行っています。

直接の原因は Shell_NotifyIcon が全て ERROR_TIMEOUT に
なってしまっていることのようです。(1秒スリープで20回トライ)
対応策はあるのでしょうか?
やはり サービスプロジェクトで書き換えるしかない?

342 名前:デフォルトの名無しさん [2007/06/17(日) 11:40:57 ]
↑の書き込みで”全て ERROR_TIMEOUT ”と書きましたが、
”全て ERROR_TIMEOUT 以外”の間違いでした。
これから調べます。すみません。


343 名前:デフォルトの名無しさん [2007/06/17(日) 11:51:40 ]
調べたら ERROR_FILE_NOT_FOUND だった。
Shell_NotifyIcon で ERROR_FILE_NOT_FOUND って
何のファイルが無いんだ??? さっぱりわからん。

ちなみにサービス起動でない場合はちゃんとアイコンは表示されます。

344 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 14:24:46 ]
>>341
それは、C/C++の質問というよりは、Win32APIの質問だ。
Win32APIのスレで質問しなおしたほうがいい。

質問し直しても、
設計が悪い、Windowsのアーキテクチャを理解しろ、
なんて言われるのがオチだが。



345 名前:デフォルトの名無しさん [2007/06/17(日) 16:41:34 ]
>>344
了解。


346 名前:デフォルトの名無しさん [2007/06/19(火) 00:40:49 ]
char *p[3] は char p[][3] と同じ意味でしょうか?


347 名前:デフォルトの名無しさん [2007/06/19(火) 01:11:34 ]
違います。


348 名前:デフォルトの名無しさん [2007/06/19(火) 01:23:23 ]
そうですか...
char **p[3] は char p[][3] と同じ意味でしょうか?



349 名前:デフォルトの名無しさん [2007/06/19(火) 01:28:22 ]
*はヒープ領域、[]はスタック領域を扱う。
だから、
char* p[3];
p[0] = new char[10];
ということはできても、
char p[][3];
p[0] = new char[10];
ということはできない。


350 名前:デフォルトの名無しさん [2007/06/19(火) 01:32:59 ]
>>349
むずかしす、難しいすぎて理解できません、orz

351 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:39:00 ]
char *p[3] は、要素数3の配列で、要素はchar 型のポインタ

char p[][3]; は…こんな型はない。これは配列初期化時の特殊な構文。

char p[][3] = {{1,1,1},{2,2,2}}; とすれば、char p[2][3] = {{1,1,1},{2,2,2}}; だし、
char p[][3] = {{1,1,1},{2,2,2},{3,3,3}}; なら、char p[3][3] = {{1,1,1},{2,2,2},{3,3,3}}; だし、
上の二つは、左辺だけを見れば、一見同じ型のように見えるが、実際に宣言されているのは異なる型。

繰り返すが、char p[][3] という型はない。
Cの配列は、サイズ固定。 



352 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:41:12 ]
×char p[][3]; は…こんな型はない。これは配列初期化時の特殊な構文。
○char p[][3]; は…こんな型はない。これは配列宣言時の特殊な構文。


353 名前:デフォルトの名無しさん [2007/06/19(火) 01:50:07 ]
>>351-352 型がキーワードみたいですが、型って何ですか?

354 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:59:31 ]
ここでいう型とは、「データ型」のこと。
ビット列で表されるデータを、どう解釈するか、ということの取り決め。

二進表記で、01100101 は、数値型の取り決めでは 十進数の101をあらわし
同じデータを、文字型ではアスキーコードと解釈して 'A' になる。

あくまでも取り決めであって、それ自体が自ら意味を持っているわけではない。
それぞれの型が、何を意味しているかは、一つ一つそのルールを覚えなければ
理解することはできない。



355 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 10:10:08 ]
>>349
>*はヒープ領域、[]はスタック領域を扱う。
はい?
おまいはPascal出身か?

356 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 17:43:03 ]
>>346
関数の仮引数という状況においてだけは、同じ意味になる

357 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:06:30 ]
PSDKのサンプルにあったんだが
CAllocator::CAllocator(HRESULT& hr, HWND wnd, IDirect3D9* d3d, IDirect3DDevice9* d3dd)
: m_refCount(1)
, m_D3D(d3d)
, m_D3DDev(d3dd)
, m_window( wnd )
{
  ....
}
っていう関数の定義があったんだが、引数リストの後、コロン以降はどんな意味がある?
検索したが、検索しにくくて見つけることが出来なかった

358 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:12:00 ]
適当に数字を入力してもらってその数だけ配列を用意したいのですが、どうすれば
できるのでしょうか?

イメージではこんな感じで宣言したい。でもこれだとエラーでる(´・ω・`)
cin>>num;
int i[num];

359 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:14:32 ]
>>357
つ[初期化指定子]

>>358
つ[c99]
つ[std::vector]

360 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:15:04 ]
int*i;
i=new int[num];

361 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:26:58 ]
>>359-360
ありがとうございます。できました(゚∀゚)
これでi[255]なんてぶさいくな宣言せずにすみます

362 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 05:39:27 ]
delete するの忘れないようにな
使い捨てのコードなら別にいいけど

363 名前:357 mailto:sage [2007/06/20(水) 09:30:27 ]
>>359
検索できた!ありがとう!
ぱっとみ難解だが頑張るよ!

364 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 14:23:53 ]
>>349
ヒープかスタックかは、型で決まるのではないぞ。




365 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 21:49:43 ]
>>364
>349は型に言及しているわけではないぞ。
#勿論、演算子に決まるわけではないが。

366 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 22:01:34 ]
レジスタ割り当てってのもあるぜ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<282KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef