トップページ⇒tech
909コメント312KB

C言語なら、俺に聞け! <9>

■ このスレッドは過去ログ倉庫に格納されています
0001C言語ハッカー Kusakabe YouichiNGNG
おれは21才、9年間プログラムを一生懸命作ってきた。
あちこちの言語に手を出したが結局極めたのはC言語だけだった。
大体のことなら分かるからオレに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

・前スレ C言語なら、オレに聞け! <8>
http://pc.2ch.net/test/read.cgi/tech/1005811510/l50
0263Kusakabe YouichiNGNG
In article >>262, 262 デフォルトの名無しさん wrote:
> まぁ char *buf = (char*)malloc( size ); と
> 書ければすむ話なんですがね。

っていうか、その表記が許されたとしても、
「宣言と代入が離れすぎていて、freeが先におこなわないことを保証できない」
コードって問題でしょ?

たとえば宣言をmallocからの代入の「すぐ近く」に置くことで、
freeがそれより前の行になってしまうようなものはコンパイル時にエラーに
できちゃうわけで。

> better C としてのC++利用。

Cでもできますね > ブロックの先頭以外に変数宣言を書く。

> 初期化は、こういうことを為かもしれませんね。
> char *a = NULL; char *b = NULL;
>
> if( !a = malloc( size ) ) goto error;
> if( !b = malloc( size ) ) goto error;
> --snip--
> error:
> free(a); free(b)

はい。たぶんそういうことをやりたいんでしょうね。
でもそれはずいぶん汚い書き方ですよね。そっちのほほうを何とかすべきで
あって、「NULLを入れておかないと危険」なような書き方自体に問題がある
わけです。
0264デフォルトの名無しさんNGNG
if(hoge)free(hoge); と言うより
free(hoge)hoge=NULL; なんだけどなあ・・・
つまりhogeにはまともなポインタかNULL以外入って欲しく無いし
それでバグ取りがやり易かったり超実用的なんだけど・・・
こんな事言うと「そんなヘボい構造自体が」とか言われそうだけど
私が書いたんじゃないんだよなあ
って言うと「そもそもそう言う設計自体が」って来るんだろねえ (^∀^)アハハッ
0265Kusakabe YouichiNGNG
In article >>264, 264 デフォルトの名無しさん wrote:

> if(hoge)free(hoge); と言うより
> free(hoge)hoge=NULL; なんだけどなあ

なるほどfreeしたあとですか?
だったら、宣言時だけじゃあだめですね。
(freeしたたびに代入ですかー)

> つまりhogeにはまともなポインタかNULL以外入って欲しく無いし

でもそれはfreeに渡す変数だけじゃなく、すべてのポインターに関して
言えるのでは?
(ある時点でその指しているものが無意味に成ってしまうポインター変数なんて
いくらでもありそうですし)

> それでバグ取りがやり易かったり超実用的なんだけど

ですからそれは「本末転倒」ってやつですね。
「わかりにくいプログラム」を「わかりやすく直す」ことをせずに、
デバッグしやすくする方法って感じですね。
0266デフォルトの名無しさんNGNG
とにかくこの人は言ってる事がかなりヤバイです、いやホント。
構造体ポインタはちょっと、、とか平気で言っちゃう人もプロジェクトには居る訳ですね
嫌あなたが超絶天才的C言語完全体なのはわかりますがね。
実際そう言う人とやってくのが仕事な訳ですよ、ええ。
そう言う人相手に「for使うならカウンタの初期化は無駄です」なんて
教えると会社潰れる位のつけ払う事になりますわ、多分
0267デフォルトの名無しさんNGNG
糞壁はその存在自体が壮大なネタだからね(と思いたいです。)
0268Kusakabe YouichiNGNG
In article >>266, 266 デフォルトの名無しさん wrote:

> とにかくこの人は言ってる事がかなりヤバイです、いやホント。

「ということにしたい」のですね? :)

> 構造体ポインタはちょっと、、とか平気で言っちゃう人もプロジェクトには居る訳ですね

意味がわからないですが...
「構造体ポインタは使わないほうがいい」という人がプロジェクトにいたりする
っていう意味ですか?

っていうか、そんな人が平気で存在できるようなプロジェクトや会社に
自分がいるっていう事実はどう認識しているのですか? :)



> 実際そう言う人とやってくのが仕事な訳ですよ、

自分のあまりにも情けない環境を「世の中のごくふつう」だと
思い込みたいからといって、事実をねじまげるには無理がありますね :)
0269Kusakabe YouichiNGNG
In article >>267, 267 デフォルトの名無しさん wrote:

> 糞壁はその存在自体が壮大なネタだからね

こういうのがいっぱい暴れて会話の邪魔をするところなんですね。
2chって。
0270デフォルトの名無しさんNGNG
Kusakabe Youichi先生は4徹でデバッグとかした事有りますか?
0271デフォルトの名無しさんNGNG
OpenDivX のコード読んだです (´ー`)
氏んだです (´ー`)
0272Kusakabe YouichiNGNG
In article >>270, 270 デフォルトの名無しさん wrote:

> Kusakabe Youichi先生は4徹でデバッグとかした事有りますか?

それって何ですか? > 4徹
0273デフォルトの名無しさんNGNG
>>269
えっネタじゃ無いんですか? (^^;
0274ikuNGNG
こんにちは。ikuと言います。
あ い うのデータを
CSVにあ,い,うという形で出力する方法を知りたいのですが,
教えて頂けないでしょうか?
それともう一つ,
もしその出力するCSV1にデータが存在していた場合,
初期化してからデータ出力をしたいのですが,
どうすれば初期化できるのでしょうか?
よろしくお願いします。m(_ _)m
0275Kusakabe YouichiNGNG
In article >>274, 274 iku <[email protected]> wrote:

> こんにちは。ikuと言います。
> あ い うのデータを
> CSVにあ,い,うという形で出力する方法を知りたいのですが,
> 教えて頂けないでしょうか?

ふつうに書けばいいのでは?
でも文字列は全部「"」で括ってたような > ふつうのCSV

> それともう一つ,
> もしその出力するCSV1にデータが存在していた場合,
> 初期化してからデータ出力をしたいのですが,

man fopen
0276お胸おっぱいNGNG
>>274
意味判らん…
空白で区切った "あ い う" を、カンマ区切りにしたいってこと?
0277デフォルトの名無しさんNGNG
なんで、こいつは、fjでほとんど発言しなかったfree()問題を
ここでしつこく語ってるかと言うと、fjでは突っ込まれるのが怖くて
発言できなかったから。
0278デフォルトの名無しさんNGNG
>>274

要するに、日本語を含んだスペース区切りのCSVを
コンマ区切りにCSVに直した言ってことか?

普通にスペースをコンマにReplaceすりゃいいじゃん。
C言語でやると漢字の2バイト目にスペースと同じ文字コードが
含まれてる可能性があって、分岐がめんどくさくなるような。
0279Kusakabe YouichiNGNG
In article >>277, 277 デフォルトの名無しさん wrote:

> なんで、こいつは、fjでほとんど発言しなかったfree()問題を
> ここでしつこく語ってるかと言うと、

はつみみですね。fjで何度か話題になったのは、
「exitするときにいちいちfreeコードは意味があるか?」という
話題なので、全然ちがう話題ですね。


> fjでは突っ込まれるのが怖くて発言できなかったから。

ということにしたいわけですね? :)
(それで私の発言は見なかったことにしてるのですね^^)
0280デフォルトの名無しさんNGNG
>>265
CODE COMPLETE 読みましょう。

私は dangling pointer 嫌いです。ただ C だと全面的に dangling pointer
を追放するのは難しい(いちいち NULL を自分で代入しないとならなず、現実
的ではない)から、諦めてますけど。

C++ を使う場合には「所有する」オブジェクトに関しては std::auto_ptr な
どのスマートポインタを多用しますし、また関連を張るために使うポインタに
ついては NULL or 意味のあるポインタ値が常に保たれるように注意します。
0281名無しNGNG
誰かさんの作ったexeファイルを
visualC++でそのプログラムを
見るにはどうしたらいいのんですか?
0282デフォルトの名無しさんNGNG
visualC++にドラッグしてドロップしろ
0283デフォルトの名無しさんNGNG
>>263
> Cでもできますね > ブロックの先頭以外に変数宣言を書く。

できませんよ。途中にブロックを作ってその先頭に変数宣言を
書くことはできますが。
0284Kusakabe YouichiNGNG
In article >>283, 283 デフォルトの名無しさん wrote:
> >>263
> > Cでもできますね > ブロックの先頭以外に変数宣言を書く。
>
> できませんよ。

いえできますよ。

> 途中にブロックを作ってその先頭に変数宣言を書くことはできますが。

そりゃもちろんできますね。でもそれは「ブロックの先頭」ですね。
0285  NGNG
>>281
逆アセンブルすればいい。MSDNをよく調べろ。
つーか、コンパイルがなんであるか良く分かってないだろ。
0286デフォルトの名無しさんNGNG
>>284
C99からはブロックの途中から変数宣言できるようになったんですか?
ANSI X3.159 の古い規格しか知らない物で。
0287  NGNG
ここはニュースグループじゃないんだから、無駄な引用はするなボケ。
しかも、articleじゃ無くてただのレス。
0288デフォルトの名無しさんNGNG
>>286
C99からできるようになったのよ。
http://std.dkuug.dk/JTC1/SC22/WG14/ 参照のこと。
厳密じゃなくてもいいなら http://seclan.dll.jp/ あたりもお手軽かも。

# 単にCと言った場合は混乱するなあ。規格の趣旨から言うと現行規格は
# ISO/IEC 9899:1999のみなんだけどさ。
0289Kusakabe YouichiNGNG
In article >>286, 286 デフォルトの名無しさん wrote:
> C99からはブロックの途中から変数宣言できるようになったんですか?

なってますよ。

for (int i = 0; ... みたいなのもできるし。

複合定数も、指定付き初期化も。
0290デフォルトの名無しさんNGNG
>>289
C99サポートしたコンパイラなんてまだ一般的ではないんだから、一言
「C99では」と前置きしとけ。
0291Kusakabe YouichiNGNG
In article >>287, 287    wrote:

> ここはニュースグループじゃないんだから(Iyぢ無駄な引用はするなボケ。

また「ニュースグループ」とかわけのわからないこと言うやつがいた :)
0292Kusakabe YouichiNGNG
In article >>288, 288 デフォルトの名無しさん wrote:
> # 単にCと言った場合は混乱するなあ。

混乱しないでしょ? override...じゃないや、えっとようするに
新しいのが古いのを上書きしてるんだし。
0293デフォルトの名無しさんNGNG
そろそろ荒らし対策にお願いでもだしとくか?
0294デフォルトの名無しさんNGNG
>>288
JIS があるやん。
0295288NGNG
>>292
> override...じゃないや、えっとようするに
outdate

> 新しいのが古いのを上書きしてるんだし。
288でもそのように書いたつもりですが。
ANSI X3.159-1989、ISO/IEC 9899:1990、ISO/IEC 9899:1999のそれぞれで仕様が
異なる場合はC89、C90、C99と明記することが多くありません? (いまだにC9Xと
呼んでる人もいるけど)
念の為、これはISO/IEC JTC1/SC22/WG14のmailing archiveやcomp.lang.cを読んだ感想です。
0296 ◆RubyOmS2 NGNG
>>295
C99に対応していないgcc2.95.3を使っている俺としては、
C99でしか使えないことは明記して貰うとありがたい。
0297Kusakabe YouichiNGNG
In article >>295, 295 288 wrote:
> > 新しいのが古いのを上書きしてるんだし。
> 288でもそのように書いたつもりですが。
> ANSI X3.159-1989、ISO/IEC 9899:1990、ISO/IEC 9899:1999のそれぞれで仕様が
> 異なる場合はC89、C90、C99と明記することが多くありません?

うーん、C90っていう言い方はあまり聞かないですね。
C89でまとめちゃってる気がする。

> (いまだにC9Xと呼んでる人もいるけど)

C99をそう呼ぶひとってのは、確実にC90とはいいそうにないですね。
0298288NGNG
>>297
> うーん、C90っていう言い方はあまり聞かないですね。
ほとんど一緒ですから。

> C99をそう呼ぶひとってのは、確実にC90とはいいそうにないですね。
そんなことないですよ。C99がdraftのころは自分のことをC9Xと呼びつつ、
ANSIを参照するときはC89、ISOを参照するとき(めったにないけど)はC90
と書いてました。その時のくせがまだ抜けない人もいるみたいです。
0299デフォルトの名無しさん NGNG
>>298
ネタにマジレスですか?
0300デフォルトの名無しさんNGNG
日下部さん御歳はいくつですか?
0301デフォルトの名無しさんNGNG
>>300
それがC言語と関係あるのか? 荒らしたいならプログラマー板の隔離スレに
いけ、ヴァカ。
0302namberNGNG
C言語の初心者ですが次のことがどうしてもわかりません。助言おねがいします。
int **a;
としたときの動的変数のメモリ確保の方法がわかりません。
例えば、
int a[3][3];
と同じ大きさのメモリを確保する場合どうしたらよいでしょう。
どうぞよろしくおねがいします。
0303デフォルトの名無しさんNGNG
>>302
int a[3][3] の置き換えならば、
int **a; ではなくて、
int (*a)[3]; であろう。
0304デフォルトの名無しさんNGNG
>>302
C FAQ見れ。
0305288NGNG
>>299
カコワルイがしょうがない。
0306デフォルトの名無しさんNGNG
char *s;
printf("%s", s);
printf(s);
これって実行結果同じ?
0307デフォルトの名無しさんNGNG
>>306

文字列に代入文字があると変わる。
だからprintf(s)は危険。
0308デフォルトの名無しさんNGNG
だれかC99について盛大に語って。
もう
「K&R読め」
の時代でなくて
「C99の規格書読め」
という時代なの?
0309307NGNG
>>306

とりあえず、printf関数の第一引数は文字列定数にするべき。
0310 ◆RubyOmS2 NGNG
>>306
#include <stdio.h>
main()
{
char *s;
s = "%%";
printf("%s", s);
printf("\n");
printf(s);
printf("\n");
}
--------------
%%
%

こんなふうに、、、
0311デフォルトの名無しさんNGNG
>>310

それはまだいいよ。

#include <stdio.h>
main()
{
char *s;
s="%d";/* %sとでもよい */
printf(s);
}

----------------------
こういうことをすると、必要な引数が足りなくて、無いものを参照しようとして実行時にエラーになると思う。
0312311NGNG
× /* %sとでもよい */
○ /* %sとかでもよい */
0313デフォルトの名無しさんNGNG
>>308
よし、盛大に騙ってやろう。
まず、C99では以下のような関数定義が可能になった。
もちろん今までのようなold styleも許される。

int
main(argc, argv)
  int argc;
  char **argv;
{ return 0; }
0314デフォルトの名無しさんNGNG
>>313
変数宣言をカーリーブランケットの外に出せるってこと?
0315デフォルトの名無しさんNGNG
>>313
              ∩
             | |
             | |
             | |
             | |
       ∧_∧  | |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ( ´Д`)//  <  先生!その場合プロトタイプ宣言はどうなりますか!
      /     /    \___________
     / /|    /
  __| | .|    | __
  \   ̄ ̄ ̄ ̄ ̄   \
  ||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
0316C99ならここを読めNGNG
プログラミング言語 C の新機能
http://seclan.s5.xrea.com/c99d/
デニス・リッチー氏インタビュー――CとUNIXの開発者が見る未来
http://www.idg.co.jp/lwonline/backnumber/200101/20010112_01_report.html
0317デフォルトの名無しさんNGNG
>>313
・・・

一応突っ込んどくね。
0318デフォルトの名無しさんNGNG
>314-315
これが2chでいう
「ネタニマジレスカコワルイ」
という奴なのか・・・?
0319デフォルトの名無しさんNGNG
それは新しいっ!
0320デフォルトの名無しさんNGNG
>>315
プロトタイプ宣言など必要ない。
型の正当性はプログラマが保証すればよい。

あと、予約語にはentryというのが追加された。
これはエントリポイントを生成し、関数の途中から処理を実行できる。
例えば
int neta(int a)
{
  a++;
entry dayo:
  a++:
  return a;
}

gomen = neta(2);の場合、gomen:4となるが、
gomen = neta.dayo(2)の場合、gomen:3となる。
0321デフォルトの名無しさんNGNG
>>320
      .          ∩
                 |::|
                 |::|
        ∧_∧   |::| ./ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       (:∵´Α`)/:/< 先生!僕は先生しんじてます!
      /:∵:∵:∵:/   \____________
     /::/|:∵:∵:∵/
  __|::| .|:∵:∵:∵|
  \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\
  ||\             \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
0322デフォルトの名無しさんNGNG
722 :Kusakabe Youichi :01/12/04 18:06
In article >>710, 710 仕様書無しさん wrote:
> > そんな変なことを言うひともいるんですね。
> そうですよね、ふつー上京は東京に行くことだし、

はつみみです。

730 :仕様書無しさん :01/12/04 18:13
>>722
じょうきょう【上京】
地方から都へ行くこと。現在は,東京へ行くこと。
(新辞林 by 三省堂 @Yahoo! DICTIONARIES)
とありますよ。

「地方から都へ行くこと。」「東京へ行くこと。」のどちらが「普通」かと言
えば現在では後者といっておかしくないでしょう?

744 :スバリ回答 :01/12/04 18:20
民明書房国語辞典
じょうきょう【上京】 [名][自サ]地方から都に出ること。京都へ出ること。

やはり、日下部氏は正しかった。

752 :Kusakabe Youichi :01/12/04 18:27
In article >>741, 741 困った wrote:

> 清水国語辞典
> じょうきょう【上京】 ジヤウキヤウ[名][自サ]地方から都に出ること‥豕・惱个襪海函
>
> 誤植ですね。

民明書房国語辞典 じょうきょう【上京】 [名][自サ]地方から都に出ること。京都へ出ること。
0323デフォルトの名無しさんNGNG
HTML 上がりの 厨房です。
  printf("%s",str);
と書きますが、HTML的には
  printf("%s%",str);
と前と後ろと囲ってもらわないと気持ち悪いです。
0324デフォルトの名無しさんNGNG
>>322
その辞書そのものが捏造かもしらんじゃん。
コンパイラー トロジャンという言葉を知らんのか。
0325デフォルトの名無しさん NGNG
>>324
厨房相手に反応すんのやめようよ(・∀・)
0326デフォルトの名無しさんNGNG

  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ・∀・)< 辞典はやっぱり民明書房だね♪
 (    )  \_______
 | | |
 (__)_)
0327デフォルトの名無しさんNGNG
日下部先生尊敬してます
0328デフォルトの名無しさんNGNG
>>327
どうしようもないレスで age るな、バカ。日下部先生を鑑賞するスレはプログラマー板
にあるから、こっちに来るように。
0329デフォルトの名無しさんNGNG
todayを25置き換える場合、
#define Today 25
と
const int today=25;
と書くのとは、どちらがいいのでしょうかね?
みなさんはどちらを書くんですか?教えてください。(出来れば理由などもあればお願いします)
よろしくお願いします。
0330デフォルトの名無しさんNGNG
>>329
enum のほうがよいんじゃない?
理由:gdbで25がtodayに読める
0331名無しさん@お腹いっぱい。NGNG
#include <stdio.h>
#include <math.h>
int N;
double M=10.0+h,h,pi=M_PI;      ←ここのhと
void integ();
double f(double);
main()
{
h=1.5;
integ();
h=0.5;
integ();
void integ()       ←ここが
{
double daikei=0.,simpson=0.;
int i;
N=M/h;
for(i=-N;i<=N;i++){daikei +=f(i*h);}
daikei *=h;
for(i=-N;i<=N;i+=2){simpson +=4.*f(i*h);}
for(i=-N;i<=N-1;i+=2){simpson +=2.*f(i*h);}
simpson *=h/3.0;
printf("\n h=%lf\n",h);
printf("sqrt(pi)=%15.10e\n",sqrt(pi));
printf("daikei =%15.10e\n",daikei);
printf("simpson =%15.10e\n",simpson);
}
}
double f(double x)
{
return exp(-x*x);
}

コンパイルしてもうまくいかないんですけど、どうしてでしょうか?
よろしかったら教えてください。
0332Kusakabe YouichiNGNG
In article >>302, 302 namber wrote:
> 例えば、
> int a[3][3];
> と同じ大きさのメモリを確保する場合どうしたらよいでしょう。

(sizeof(int) * 3 * 3)では?
0333Kusakabe YouichiNGNG
In article >>306, 306 デフォルトの名無しさん wrote:

> char *s;
> printf("%s", s);
> printf(s);
> これって実行結果同じ?

sのなかにバックスラッシュや%がなければね。
0334Kusakabe YouichiNGNG
In article >>308, 308 デフォルトの名無しさん wrote:

> だれかC99について盛大に語って。
> もう
> 「K&R読め」
> の時代でなくて
> 「C99の規格書読め」
> という時代なの?

K&RもC99対応のが出るのでは?
0335Kusakabe YouichiNGNG
In article >>309, 309 307 wrote:

> >>306
> とりあえず、printf関数の第一引数は文字列定数にするべき。

なんで連体形?
0336Kusakabe YouichiNGNG
In article >>314, 314 デフォルトの名無しさん wrote:

> >>313
> 変数宣言をカーリーブランケットの外に出せるってこと?

ライナスがいつも持っているやつですね! > ブランケット


ライナス 《漫画 Peanuts に登場する Lucy の弟;
いつも安心毛布 (security blanket) を持ち歩くインテリ少年》
―民明書房刊『ライナスのすべて』より
0337デフォルトの名無しさんNGNG
何人騙っている人がいるのか知らないけど、うざいよ。
0338デフォルトの名無しさんNGNG
>>323-336
ネタはやめれ。
0339デフォルトの名無しさんNGNG
>>332
sizeof(int[3][3])じゃだめ?
0340デフォルトの名無しさんNGNG
コールバック関数の作りかたと
用途おしえて
0341デフォルトの名無しさんNGNG
>>340
printf("kusakabe");
0342デフォルトの名無しさんNGNG
>>340

void callback(void)
{
;
}

用途は実行速度を飛躍的に高める。
0343Kusakabe YouichiNGNG
In article >>329, 329 デフォルトの名無しさん wrote:

> todayを25置き換える場合、
> #define Today 25
> と
> const int today=25;
> と書くのとは、どちらがいいのでしょうかね?

第4章に書いてありますね。
0344デフォルトの名無しさんNGNG
>>340

void inarticle(char *wrote)
{
puts("kusakabe");
}
0345Kusakabe YouichiNGNG
In article >>331, 331 名無しさん@お腹いっぱい。 wrote:

> double M=10.0+h,h,pi=M_PI;      ←ここのhと
> void integ()       ←ここが
> コンパイルしてもうまくいかないんですけど、

いくわけないですね。

> どうしてでしょうか?

書き方がまちがっているからです。
0346Kusakabe YouichiNGNG
In article >>339, 339 デフォルトの名無しさん wrote:

> >>332
> sizeof(int[3][3])じゃだめ?

問題ないね。
0347デフォルトの名無しさんNGNG
>>331
> double M=10.0+h,h,pi=M_PI;      ←ここのhと

宣言前にhを参照してるし、hは定数でない。

> void integ()       ←ここが

標準的なCでは関数定義はネストできない。
0348デフォルトの名無しさんNGNG
これからは「誰かの話やソースを皮肉りたいとき」には
くさかべ名乗ればいいから
ラクに皮肉や否定ができるな。
0349デフォルトの名無しさんNGNG
>>348
もともと匿名なんだから、他人の名を借りなくても出来るだろ。
糞壁名乗ってるのは遊んでるだけ。
0350Kusakabe YouchiNGNG
>>348

ということにしたいのですね?:)
0351デフォルトの名無しさんNGNG
>>332
> (sizeof(int) * 3 * 3)では?
ホントに?

問:
int a[3][3];において常に&a[0][3] == &a[1][0]は成り立つか。
(10点)
0352むぎ茶NGNG
だから、kusakabeは俺みたく、煽り共有コテハンになる、って言ったろ。
0353デフォルトの名無しさんNGNG
>>351
成り立つ
0354重複しない乱数考えてみたよ1/2NGNG
#include <stdio.h>
#include <memory.h>
#include <time.h>
#include <malloc.h>
#include <stdlib.h>

/* 「くじびき」構造体*/
struct lot{
 int *begin;  /* 配列先頭*/
 int size;  /* 配列の要素数 */
 int current; /* 配列内の現在の参照オフセット*/
 int limit;  /* 配列内の現在の有効領域終端オフセット */
};

/* 初期化 */
int init_lot(struct lot* L){
 int i,v;
 if(!L || !L->begin || L->size<1) return -1; /*err*/
 L->limit = L->size - 1;
 memset(L->begin,0xff,sizeof(int) * L->size);/* -1は値が未設定とする*/
 srand(time(NULL));
 i=0;
 for(v=0; v<L->size; v++){
  if((i+=rand()) >= L->size) i %= L->size;
  while(*(L->begin+i)!=-1){ i = (i>=L->size ? 0 : i+1);}
  *(L->begin+i) = v;
 }
 L->current = 0;
 return 0;
}
0355重複しない乱数考えてみたよ2/2NGNG
/* くじをひく */
int draw_lot(struct lot* L){
 int ret;
 if(!L || !L->begin || L->size<1 || L->limit<0) return -1; /* err */
 if(L->limit > 0){
  L->current += rand();
  if(L->current > L->limit) L->current %= L->limit;
 }
 ret = *(L->begin + L->current);
 *(L->begin + L->current) = *(L->begin + L->limit);
 *(L->begin + L->limit) = ret;
 L->limit--;
 return ret;
}

/* リセット */
int reset_lot(struct lot* L){
 if(!L || !L->begin || L->size<1) return -1; /* err */
 L->limit = L->size - 1;
 srand(time(NULL));
 return 0;
}

/* 使用例 (コマンドラインで配列サイズと試行回数を指定)*/
int main(int argc, char *argv[]){
 struct lot lotlot;
 int i, n, size=10,loop=10;
 if(argc>1) size = atoi(argv[1]);
 if(argc>2) loop = atoi(argv[2]);
 lotlot.begin = malloc(sizeof(int)*size);
 lotlot.size = size;
 init_lot(&lotlot);
 for(i=0;i<loop;i++){
  while((n=draw_lot(&lotlot))!=-1) printf("%2d ",n);
  printf("\n");
  reset_lot(&lotlot);
 }
 free(lotlot.begin);
 return 0;
}
0356デフォルトの名無しさんNGNG
なにゆえ

なにがしかの関数呼び出しの際、そこに渡す引数名と

渡した後、そこの内部で使われる引数名は

似たような名前にしたらイカンとですか?
0357Kusakabe YouchiNGNG
>>356

そんなことも分からないような人がいるからですね:)
0358デフォルトの名無しさんNGNG
>>356
べつにそんなこと無いんじゃない?
0359デフォルトの名無しさんNGNG
>>351
必ずしもなりたたないよー。
0360同じようなNGNG
「max」で最大長を見てた
そして関数に渡した
んで、maxを入れてることが分かりやすいようにと思って、渡され側にも「max」と入れようとしたら

「何やってるかわからなくなるから、そこは limit とでもしといて」

だって。
余計に分かりづらいやないかい。
0361デフォルトの名無しさんNGNG
>>353
残念はずれ。
0362初心者NGNG
>>351
お尻に詰め物が入る(処理系が有る)ですか?
糞壁の言う事は絶対聞かない (^^;
■ このスレッドは過去ログ倉庫に格納されています