C言語なら俺に聞け(入門編)Part 78at TECH
C言語なら俺に聞け(入門編)Part 78 - 暇つぶし2ch211:199
11/02/08 22:47:06
>>206
「;」で区切るまでってことですかね?
>>209
関数呼び出しの外に出すっていうのは具体的にどう書くのですか

212:デフォルトの名無しさん
11/02/08 22:49:44
#include<stdio.h>
int main(void)
{
int sum;
printf("数字を入力してください\n");
scanf("%d",&sum);
do
{
printf("%d",sum % 10);
sum = sum/10;
}
while(sum > 0);
return 0;
}

エラーでます・・・

parese error before"G"

Gなんて言葉ありませんよ?どういうことでしょう

213:デフォルトの名無しさん
11/02/08 22:51:24
>>211
何怒ってんだよ。落ち着けってww

a++;
printf("%d",a);

みたいに分けろって事なんじゃね

どっちにしろprintf("%d %d\n",a++,a++);とかは
コンパイラによって評価の仕方が違うから理解する必要ない

というかやってはいけないと理解するべき

214:デフォルトの名無しさん
11/02/08 22:51:52
>>212
日本語のところがあやしくね?

215:デフォルトの名無しさん
11/02/08 22:53:04
>>212
エラー文を出てきたまま書いて下さい

216:デフォルトの名無しさん
11/02/08 22:54:42
>>213


217:デフォルトの名無しさん
11/02/08 22:56:52
>>212
5行目が全角セミコロン

218:デフォルトの名無しさん
11/02/08 22:57:31
マジだわろたw

219:デフォルトの名無しさん
11/02/08 22:58:54
>>211
例えば
>printf("a=%d , a++=%d , ++a=%d\n",a,a++,++a);



>int b = a++;
>int c = ++a;
>printf("a=%d , a++=%d , ++a=%d\n", a, b, c);

220:199
11/02/08 23:00:14
>>213
ごめん全然怒ってないんだけど、>>212の間違いかな。
なるほど、変数が同じときは一個一個分けて書くってことですか。
「,」で続けるのはやってはいけないって覚えておくことにします。

221:デフォルトの名無しさん
11/02/08 23:02:11
>>219
あ、これじゃaの値が変わってしまうからaも保存しとかなきゃ

>int aa = a;
>int b = a++;
>a = aa;
>int c = ++a;
>printf("a=%d , a++=%d , ++a=%d\n", aa, b, c);

222:デフォルトの名無しさん
11/02/08 23:09:38
「国民諸君、同志諸君、最後まで戦い続ける諸君に敬意を表する。すでに戦況は……私はベルリンと運命をともに……
しかしナチスは不滅である……たとえ米ソがいったんは勝つように見えようとも……。
そうなのだ、それは砂の上の勝利だ。彼らは世界の真の支配者ではないからだ。彼らの背後で操る者……ユダヤ……イスラエル……

世界的なユダヤ国際資本……。米ソは……おそらく1990年代ごろまで、対立と妥協を繰り返しつつ、世界を運営しようとする。
しかし所詮……ヨーロッパと日本、東アジア、イスラム諸国、インド……いずれ世界は米ソの手に負えなくなる。
そのときユダヤはみずから……に乗り出す。

哀れなアラブ4カ国……最終戦争。東西が激突するだろう。
ユダヤはそれに勝って全世界……なぜならそれが彼らの『旧約聖書』の約束だからだ。
黙っておけば必ずそうなる。しかし、私がそうはさせない。そのための手を、私は死ぬ前に打っておく。
それが最後の秘儀である。それによって人類はわれわれを受け継ぐことになる。
しかも見よ、そのあと、わがナチスの栄光、ラストバタリオン……。
それが真のハーケンクロイツの日だ。カギ十字の日だ。そのときラストバタリオンが現われる。ユダヤを倒す。
世界を支配する。永遠に……そしてナチスは甦る。真のヒトラーの時代が来る。必ずだ。
甦ったナチスの軍団とその強力な同盟がそのとき来る。宇宙からの復讐のカタストロフィとともに来るぞ。それからが真の究極だ。
真の終わりで真の始まり、真の淘汰、天国の地獄、21世紀のその年に、人類の驚くべき究極の姿……ではそれを明かそう。諸君、それは人類……」

223:デフォルトの名無しさん
11/02/08 23:40:13
>>212
while(sum > 0);
これ怖い。

224:デフォルトの名無しさん
11/02/08 23:49:41
>>223
どう怖いんですか?

225:デフォルトの名無しさん
11/02/08 23:51:05
>>224
マイナスの値を入力したら下手をすると永久ループに飛び込む
環境依存だけど

226:デフォルトの名無しさん
11/02/08 23:52:15
しかし-1を10で割ってマイナスになる環境はさすがにないだろ

227:デフォルトの名無しさん
11/02/08 23:53:09
永久ループになったときってコンソールターミナルどうしたらいいんですか?

228:デフォルトの名無しさん
11/02/08 23:54:38
>>227
OSによって全然違うからOSマニュアルみたら
Windows DOS窓ならCtrl+C
Windows GUIならタスクマネージャから落とす

229: ◆QZaw55cn4c
11/02/09 00:02:56
>>220
関数の区切りの , (コンマ)はたしかに注意すべきということでそのとおりなのですが、
順次演算子のコンマ(というのもあります。)については、これは副作用完了点(sequence point) です。
順次演算子の左で発生した副作用(++ とか -- とか)は、順次演算子のところで確定します。
副作用完了点となるのは、&&, ||, ?:(三項演算子/条件式)と順次演算子のコンマです。

そういうものもあるということで、一応コメントしておきます。

230:デフォルトの名無しさん
11/02/09 00:02:57
>>227
そのターミナルで Ctrl-C するか、別のターミナルから
ps や top で プロセス ID を探して、kill -9 <PID> する。

231:デフォルトの名無しさん
11/02/09 00:04:19
>>229
氏ね

232:デフォルトの名無しさん
11/02/09 00:04:25
>>229
そんなもん知っとるわカス

233:デフォルトの名無しさん
11/02/09 00:05:21
229 : ◆QZaw55cn4c :2011/02/09(水) 00:02:56
>>220
関数の区切りの , (コンマ)はたしかに注意すべきということでそのとおりなのですが、
順次演算子のコンマ(というのもあります。)については、これは副作用完了点(sequence point) です。
順次演算子の左で発生した副作用(++ とか -- とか)は、順次演算子のところで確定します。
副作用完了点となるのは、&&, ||, ?:(三項演算子/条件式)と順次演算子のコンマです。

そういうものもあるということで、一応コメントしておきます。

234:デフォルトの名無しさん
11/02/09 00:08:04
◆QZaw55cn4cはやっぱり精神状態おかしいよこいつ
何か一言いちゃもんを付けなければ気が済まないアホだなこいつは

235:デフォルトの名無しさん
11/02/09 00:11:43
そんなに知識をひけらかしたいか
と言いたいところだけど、その「知識」も常識レベルだからそんなドヤ顔で書かれても寒いだけ

236:デフォルトの名無しさん
11/02/09 00:14:04
おまいら本当に優しいんだなあ
単に暇なだけじゃこうまで突っ込みは出来ないよな

237:デフォルトの名無しさん
11/02/09 00:15:16
突っ込みは◆QZaw55cn4cの独断場

238:デフォルトの名無しさん
11/02/09 00:17:20
>>236
だって、大基地に群がるキチガイだからな

239:デフォルトの名無しさん
11/02/09 00:18:01
>>236==>>238==◆QZaw55cn4c

240:デフォルトの名無しさん
11/02/09 00:18:38
◆QZaw55cn4c糞すぎワロタ

241:デフォルトの名無しさん
11/02/09 00:19:27
>>239==大基地に群がるキチガイ

242:デフォルトの名無しさん
11/02/09 00:19:46
>>241==◆QZaw55cn4c

243:デフォルトの名無しさん
11/02/09 00:20:30
わかりやすすぎる
◆QZaw55cn4cは頭に血が上ると見境が付かなくなる馬鹿ですね

244:デフォルトの名無しさん
11/02/09 00:21:59
◆QZaw55cn4cは自分のスレで引きこもって金儲けでもしてろよ

245:デフォルトの名無しさん
11/02/09 00:25:15
こいつ近い将来犯罪を犯しそうなタイプだよな
おーこわ

246:デフォルトの名無しさん
11/02/09 00:31:53
基地外がいっぱい

247:デフォルトの名無しさん
11/02/09 00:32:50
衒学的ってことだな

248:デフォルトの名無しさん
11/02/09 00:34:02
正規分布にのっとった乱数がほしい

249:デフォルトの名無しさん
11/02/09 00:48:35
◆QZaw55cn4cは糞

250:デフォルトの名無しさん
11/02/09 01:01:41
void mem_cpy(void *dst,void *src,u_int size){
     char *p1 = *dst;
     char *p2 = *src;
     while(size--){
          *p1** = *p2++;
     }
}
基本的なソースはこういう形として,
こういう形で,エンディアンの問題を回避する方法ってある?

251:デフォルトの名無しさん
11/02/09 01:03:45
>>250
C言語でないものはスレ違い

252:デフォルトの名無しさん
11/02/09 01:05:16
>>250
エンディアンの問題って、何を「問題」だと思ってるの?

それによって解答は変わる。

253:デフォルトの名無しさん
11/02/09 01:07:34
sscanf( str,"<hogehoge='111'><hogehoge=\"unkunk\">%I64</hogehoge><return type=\"string\">%s</return></result>",&did, buf);

bufに何も入らないんだけど何が悪いんだ?

254:デフォルトの名無しさん
11/02/09 01:08:27
bufの型

255:253
11/02/09 01:09:56
char buf[256];

256:デフォルトの名無しさん
11/02/09 01:11:42
>>253
sscanf のリターンコードを見るんだ

257:デフォルトの名無しさん
11/02/09 01:12:16
strの内容も見たいよ

258:デフォルトの名無しさん
11/02/09 01:13:48
>>253
その%sだと空白文字(' ', '\n', '\t')を含む文字列は取り込めないが大丈夫か?
逆に、</return>の前に空白がないとくっついてしまうが大丈夫か?
"%s"の代わりに"%255[^<]"にでもした方がいいかも試練。

259:デフォルトの名無しさん
11/02/09 01:14:00
スレリンク(tech板)

260:デフォルトの名無しさん
11/02/09 01:19:50
>>259
糞ワロタw

261:デフォルトの名無しさん
11/02/09 01:20:20
>>258
良レス

262: ◆QZaw55cn4c
11/02/09 01:20:31
>>253
%I64d

263:250
11/02/09 01:23:05
組み込みをするときに
エンディアンの違うコンピュータで動作させることになって,
エンディアンの違いによってコピー結果が変わる事象です

264:デフォルトの名無しさん
11/02/09 01:23:52
<hogehoge='111'><hogehoge=\"unkunk\">4503599628031276</hogehoge><return type="string">@Unk_dayo</return></result>
↑こんな感じのがポインタでくるから
sscanf( str,"<hogehoge='111'><hogehoge=\"unkunk\">%I64</hogehoge><return type=\"string\">%s</return></result>",&did, buf);
で@Unk_dayoをとりたいんです


265:デフォルトの名無しさん
11/02/09 01:29:03
>>262
>>258
ありがとうございます



266:デフォルトの名無しさん
11/02/09 01:33:40
面倒臭がらないで自分でstrtokで解析しろよ

267:デフォルトの名無しさん
11/02/09 01:38:22
やだ

268:デフォルトの名無しさん
11/02/09 01:40:24
じゃあ正規表現ライブラリでもリンクしろ

269:デフォルトの名無しさん
11/02/09 01:50:58
C#ならregex付いてるのになあ
C使いは大変だな

270:デフォルトの名無しさん
11/02/09 01:54:39
明後日の方向で優越感に浸ってる人が居るw
Cを知らないと大変だな

271:デフォルトの名無しさん
11/02/09 02:01:22
>>263
エスパーすると
#ifdef BO_UNIX
# define READ2LE ...
# define READ4LE ...
# define READ8LE ...
# define READ2BE ...
...
#elif defined BO_XINU
# define READ4LE ...
...
#endif
などのマクロを介せばいい

272:デフォルトの名無しさん
11/02/09 02:05:08
>>263
>>250においては問題ない。その問題は外で解決すべき

273:デフォルトの名無しさん
11/02/09 02:33:35
C言語プログラミングの初歩の初歩という本を読んでるんですが
P.74でscanfは変数に値を読み込むときは変数名の先頭に&をつけると書いてあるんですが
P.191をみるとscanf("%s",input);なんてかいてあるんですが
&を書く場合と書かない場合について教えてください。

274:273
11/02/09 02:40:20
ソースはこれです↓
//入力された英数字文字列に対して、小文字があればそれを大文字に置き換えるプログラム
//ただし、英数字は1行最大80文字まで入力でき、日本語や空白等は入力しないものとする。

#include<stdio.h>
int main()
{
char c[81];
int loop;

for(loop=0;loop<81;loop++) //c[81]を\0で初期化
{
c[loop] = '\0';
}

printf("文字列を入力してください(英数字で)\n");
scanf("%s",c); //ここでscanf("%s",&c);と書いても同じになるよ

for(loop=0;loop<81;loop++)
{
if(c[loop]>=97 && c[loop]<=122)
{
c[loop] -= 32 ;
}
}

printf("小文字を大文字に変換しました\n%s\n",c);
}

275:デフォルトの名無しさん
11/02/09 03:02:47
>>274
c
&c
&c[0]
&0[c]
どれも等価だから。

276:デフォルトの名無しさん
11/02/09 03:04:57
>>275
&c は型が違う

277:デフォルトの名無しさん
11/02/09 03:08:13
char c[81]; としたとき、cは&c[0]と同じ意味。
&cはちょっと特殊で、生み出されたポインタの型がちがうんだけど、
それを活用する場面はあまりないし、上記のいずれかを使えばいいよ。

&をつけるかどうかについては、引数にポインタを渡さなければならないという観点でみると
整理できるかも。

278:デフォルトの名無しさん
11/02/09 03:09:26
あら、レスついてた。スレ汚しスマソ。

279:デフォルトの名無しさん
11/02/09 03:09:48
あぁ、確かにそうだな
スマン


280:デフォルトの名無しさん
11/02/09 03:13:32
一生懸命全部WCHARにして
while (fgetws(data, 1000, fp) != NULL){したらここで1回はブレークポイントで止まるのですがその後落ちます。次の行では止まりません。(WCHAR data
次の行swscanf_s(data,L"%s ; %s ; %s ; %d ; %d ; %d",&変数~
どうしてでしょうか?

281:デフォルトの名無しさん
11/02/09 03:17:31
開いてるファイルはunicodeで記述されてるの?

282:デフォルトの名無しさん
11/02/09 03:22:28
&cをインクリメントすると81バイト進むんですか?

283:273
11/02/09 03:24:48
ポインタとか型とかを知らないと理解できないってことか…

284:デフォルトの名無しさん
11/02/09 03:25:09
>>280
うせろクズ

285:デフォルトの名無しさん
11/02/09 03:26:53
>>280
荒らしないでくだちい

286:デフォルトの名無しさん
11/02/09 03:29:30
>>283
関数に変数の値を変えてもらうには変数のアドレスを渡さないといけないんだよ。
ただ配列の場合はchar a[16]とするとaと書くだけで配列の先頭のアドレスを意味するからscanfでもaだけで良い。

287:デフォルトの名無しさん
11/02/09 03:32:20
>>283
しばらくポインタ型の変数を宣言する予定がないなら、
配列は配列名を渡す(&をつけない)
配列ではない場合は&をつける
でいいよ。

288:デフォルトの名無しさん
11/02/09 03:33:58
>>282
そうです。
配列のアドレスだからです

289:デフォルトの名無しさん
11/02/09 03:35:30
>>281
ありがとうございます
.txtのファイルを読み込んでいるので、読み込むテキストをメモ帳でunicodeで保存しなおしましたが
やはり同じ所で落ちます。

290:デフォルトの名無しさん
11/02/09 03:43:32
>>289
dataの宣言は?
というか再現できるコードもらったほうが早いかも。

291:デフォルトの名無しさん
11/02/09 03:49:17
>>282
インクリメントされるのでテストコードを書いてみる勉強をどうぞ

292:デフォルトの名無しさん
11/02/09 03:51:46
落ちた理由を調べるのが手っ取り早いと思うけどね。
なに、coreファイルが作成されていない?

293:デフォルトの名無しさん
11/02/09 03:52:03
>>290
すみません。
ファイルの読み込み時に
if ( (fp = fopen(readfile, "r") )== NULL){終了i}から
if ( _wfopen_s(&fp,readfile, L"r")== NULL){終了}に変えた時に!=としなかったので正常終了ならNULLが帰るため正常終了していないのに終了していませんでした
ありがとうございました

294:デフォルトの名無しさん
11/02/09 03:55:19
>>293
解決してよかった。続きをがんばれ。

295:デフォルトの名無しさん
11/02/09 03:57:40
_wfopen_sの直後に終了してるならfgetwsの行にこないと思うが、まぁいいか。

296:273
11/02/09 04:05:08
>>286-287
理解できそうでできない…
関数はint main(){}のことで
変数ってのはc[81]で
配列の先頭のアドレスってchar a[16]の場合はa[0]のことでしょ
その理論で行くとscanf("%s",a[0])でscanf("%s",a)と同じってことだよね
でもa[0]に文字列って入らないと思う…入るのって1文字だけ?
プログラミングは始めたばっかだけどポインタ型の変数ってやつは近いうちにやってみたいな

297:デフォルトの名無しさん
11/02/09 04:11:28
> 関数はint main(){}のことで
mainも関数だし、scanfも関数。もちろんprintfも。
>>286が言った「関数」はここではscanfを指している。

> 配列の先頭のアドレスってchar a[16]の場合はa[0]のことでしょ
a[0]は配列の先頭要素であって、先頭のアドレスじゃないので
> その理論で行くとscanf("%s",a[0])でscanf("%s",a)と同じってことだよね
上記の間違いにより、これも間違い。
>>277で書いたとおり、scanf("%s",&a[0])とscanf("%s",a)は同じ。

> でもa[0]に文字列って入らないと思う…入るのって1文字だけ?
そのとおり。

298:デフォルトの名無しさん
11/02/09 04:13:41
>>296
>その理論で行くとscanf("%s",a[0])でscanf("%s",a)と同じってことだよね

違うよ。
aと等価なのは&a[0]。

299:273
11/02/09 04:40:34
>>297-298
なるほど、そういうのを全部関数っていうのか

要素とアドレスを間違えていたせいで変なことを言ってしまいました
この本340ページもあるのにアドレスなんて言葉ひとことも書いてない…
>>277の文が理解できるまでネットで調べて頑張ってみます。

300:デフォルトの名無しさん
11/02/09 04:46:27
>>296
可能ならば、一番最初にポインタ(メモリアドレスの概念)を学んだ方がいい
実用的なCプログラムは、ほぼ全てがアドレスありきだから
頭の中でメモリをイメージ出来さえすればポインタなんて難しくもなんともなくなるよ

301:デフォルトの名無しさん
11/02/09 06:44:34
do while のwhileにはwhile();
;がつくのに

普通のwhile(){}には
while();とならない。

何故ですか?

302:デフォルトの名無しさん
11/02/09 08:50:19
>>301
while (条件) ; // 実行文がない。
この場合はセミコロンが必要です。同じことは
do {} while (条件) ;
とも書けます。やっぱりセミコロンが必要ですね。問題ありません。

303:デフォルトの名無しさん
11/02/09 08:59:36
>>302
ありがぷー

304:デフォルトの名無しさん
11/02/09 09:04:54
do ; while (1);

305:デフォルトの名無しさん
11/02/09 11:30:36
>>262
あ、お前は氏んでください

306:デフォルトの名無しさん
11/02/09 16:57:42
ぷっぷー

307:デフォルトの名無しさん
11/02/09 17:11:52
ぷっぷー

308:デフォルトの名無しさん
11/02/09 18:01:05
直ったのか

309:デフォルトの名無しさん
11/02/09 18:05:53
直ったのか

310:デフォルトの名無しさん
11/02/09 18:13:48
直ってない

311:デフォルトの名無しさん
11/02/09 19:40:11
直ってない

312:デフォルトの名無しさん
11/02/09 19:51:16
直ってない

313:273
11/02/09 20:20:45
結局メモリとアドレスについてよくわからないんだけど
int a;
a=5;
とやるとメモリとかアドレスとかはどういう動きをするの?
ポインタはアドレスを記憶するための変数って認識で合ってると思うけど。


314:デフォルトの名無しさん
11/02/09 20:21:26
メモリもアドレスも別に動きはしない

315:デフォルトの名無しさん
11/02/09 20:38:35
変数のサイズ分の領域を確保するだけ

316:デフォルトの名無しさん
11/02/09 20:49:01
>>313
こういう単純な問いが実は一番答えにくかったりする
ポインタについて聞かれた日にゃどう説明していいやら

317:デフォルトの名無しさん
11/02/09 20:55:03
>>313
計算機の基礎からやり直せ

318:デフォルトの名無しさん
11/02/09 20:57:45
メモリは運動しないが
信号に応答するという意味で「動く」ぞ

319:273
11/02/09 21:06:16
int a;でまず0x65fdf4というアドレスが確保されて
メモリの0x65fdf4というアドレスにaという変数が記憶される。
ここまでは合ってると思うんだけど
a=5;ではさらに0x~~1というアドレスが確保されて
メモリの0x~~1というアドレスに5という値が記憶されて
0x65fdf4と0x~~1が同じものをさしてますよという情報を
記憶するアドレス0x~~2があるってことですか

320:デフォルトの名無しさん
11/02/09 21:21:20
さらに確保されない
変数 a のアドレスが 0x65fdf4 なら、
a=5 はアドレス 0x65fdf4 のメモリ領域に数値 5 を記憶するだけ

321:273
11/02/09 21:31:15
0x65fdf4のメモリ領域っていうのは変数 a 1文字だけじゃなく
変数aが5だという情報を記憶できるってことか

322:デフォルトの名無しさん
11/02/09 21:37:04
「a」とかいう変数の名前は、コンパイル後のプログラム(exeファイル)からは消え去っているので、それを覚える領域は要らない
値を記憶する領域だけが必要で、それが変数のアドレス

323:デフォルトの名無しさん
11/02/09 21:40:27
>>321
0x65fdf4は俺の家の住所
変数 aは俺の家名前
変数aが5は俺の家にいる奴

324:デフォルトの名無しさん
11/02/09 21:42:25
家に名前をつけるのって喩えになってるの?そんな奴、存在するの?

325:デフォルトの名無しさん
11/02/09 21:51:51
この辺はどうやって説明したら良いか難しいよね

326:デフォルトの名無しさん
11/02/09 21:57:22
コンピューターはメモリーを持っている。
メモリーはアドレスと値を対応付けて記憶できるようになっていて、アドレスを指定して対応する値を読み出すことが出来るようになっている。
アドレスは例えば0x0065fdf4(16進数)のような32ビットの数字で表されるが、人間には分かりにくいのでaとかという別名をつける。
ただ、aと書いてしまうと今度はコンピュータが理解できなくなるので、
人間がaに5を記憶させるつもりで、a = 5; と書いたもの(ソースコード)を、0x0065fdf4に5を記憶しろとコンピュータへの命令(機械語)に変換するのがコンパイラ。

327:デフォルトの名無しさん
11/02/09 21:59:16
>>321
自分でお絵かきすればすぐに理解できるからやってごらん。

メモリは1列に並んだ箱の集まり。
それぞれの箱に番号を振ると箱1や箱2となるが、その番号部分がアドレス。
そして箱の中には「数値」だけしか入れられない。

その箱の中の「数値」を機械に「どう解釈させるか?」を決めるのが型。
int aなら、箱の中身は符号付整数と機械は解釈する。
int *aなら、箱の中身は他の箱番号を指している、つまりint型へのポインタと機械は解釈する。

328:デフォルトの名無しさん
11/02/09 22:01:43
int a、int *aと箱の関係が分からない。

329:デフォルトの名無しさん
11/02/09 22:07:15
いい加減みんな釣られすぎw

330:デフォルトの名無しさん
11/02/09 22:12:03
ゲソ!

331:デフォルトの名無しさん
11/02/09 22:16:47
何でも釣りとか言われたら機能しないぞw

332:デフォルトの名無しさん
11/02/09 22:17:40
C言語の本スレでやってください
スレリンク(tech板)

333:デフォルトの名無しさん
11/02/09 22:20:04
>>328
つまり、int aもint *aも、実際はどこかの箱(アドレス)を指しているにすぎない。
箱自体なのか中身なのか、その違いを識別させるのが型ってこと。

334:273
11/02/09 22:24:46
>>326-327
なるほど、理解できたと思う
>>327の最後の行と>>326の内容から察するに、
int a; int *p; p=&a; について int型変数aのアドレスが0x0065fdf4、int型ポインタpのアドレスが0x0065fdf8だとすると、
人間がpに0x0065fdf4を記憶させるつもりでp=&aと書いたものを、
コンパイラは0x0065fdf8に0x0065fdf4を記憶しろとコンピュータへ命令するってことだ
つまりメモリは0x0065fdf8にpと0x0065fdf4が同じだという情報を記憶するのではなく
0x0065fdf8というアドレスには0x0065fdf4という値が入った状態になるってことだな

335:デフォルトの名無しさん
11/02/09 22:28:32
Exactly!

336:デフォルトの名無しさん
11/02/09 22:31:19
箱wwwwwwwwwwwwwwwwwww

337:デフォルトの名無しさん
11/02/09 22:34:36
箱?

338:デフォルトの名無しさん
11/02/09 22:36:05
>>334
>>273の話に戻ると、誰かに箱の中身を変えさせたいときに
中身だけを渡してもしょうがないわけで、箱自体を渡す必要がある。
だからscanf()では、「箱の中身を指している変数」ではそのアドレスを渡さなきゃならない。
配列の場合はもともと先頭のアドレスを指しているので、&は不要、というわけ。

339:273
11/02/09 22:50:54
>>338
そういうことか
アドレスとメモリを理解したらわかるようになりました
みんなありがとう

340:デフォルトの名無しさん
11/02/09 23:55:26
線形リスト構造の使い方について質問です。
URLリンク(codepad.org)
1. mallocの使い方はあっていますか。
2. 解放はちゃんとできていますか。
どうぞよろしくお願いいたします。

341:デフォルトの名無しさん
11/02/10 00:11:53
>>340です。
C言語初心者質問総合
スレリンク(pc2nanmin板)
誰かが↑にコピーを張り付けていますがこれ私じゃないです。
だれですか orz

342:デフォルトの名無しさん
11/02/10 00:17:07
マルチすんなボケ

343:デフォルトの名無しさん
11/02/10 00:20:30
許せんな

344:デフォルトの名無しさん
11/02/10 00:21:11
許せんよ

345:デフォルトの名無しさん
11/02/10 00:23:27
>>341
自分でしたくせに

346:デフォルトの名無しさん
11/02/10 00:26:45
あわよくばそっちのスレで答えを得ようとしたんだな

347:デフォルトの名無しさん
11/02/10 00:36:11
うむ

348:デフォルトの名無しさん
11/02/10 01:18:17
基本挿入法のソートのステップについてお聞きしたいのですが
       
3 2 4 5 1を小さいものから並べる時に
i j p ←コレ
3 2 4 5 1

ってなんですか?

349:デフォルトの名無しさん
11/02/10 01:28:26
エスパーさん出番です

350:デフォルトの名無しさん
11/02/10 01:51:00
>>324
俺の家、エグゼクティブあばら家って名前がついてるよ

351:デフォルトの名無しさん
11/02/10 01:55:56
マジレスでお願いしますが、C言語使ってると有利になる仕事ありませんか?
どうせ技術だけもっていて知恵がないと何をやっても中途半端に終わるという
意見は無しでお願いします。

今は学生なんでアルバイトでもいいです、何か有利なことありますか?
ゲーム作って売るとかどうでしょう?

352:デフォルトの名無しさん
11/02/10 02:00:32
え?

353:デフォルトの名無しさん
11/02/10 02:05:34
>>340 != >>341-347(自演)
だなたぶん。

354:デフォルトの名無しさん
11/02/10 02:06:31
>>348
それ基本挿入法じゃないんじゃない?
挿入ソートなら変数は 3 つも要らないと思われ。

i : 調査対象となっている位置
j : 比較対象となっている位置

で十分かと。

355:デフォルトの名無しさん
11/02/10 02:06:45
>>351
Cを使う仕事でないとだめ?
Cをちゃんと理解できてるかどうかはその人の素養をみるためのいいバロメーターになるけれど。

356:デフォルトの名無しさん
11/02/10 02:08:56
だめ

357:デフォルトの名無しさん
11/02/10 02:09:51
C言語を使う仕事で、C言語を使えることは何も有利に働かないよ。

358:デフォルトの名無しさん
11/02/10 02:10:38
『C だけ知っている学生がお金を稼ぐ道はあるか』という命題で良いのかな

Java だけ、JavaScript だけ、PHP だけ、Perl だけ、Objective-C だけ
とかならありそうなんだけど、C かあ・・・

359:デフォルトの名無しさん
11/02/10 02:12:01
一番難しいCかあ

360:デフォルトの名無しさん
11/02/10 02:15:18
Cしかできないプログラマはいても
Cすら出来ないプログラマはいないよ
こんぴゅーたーの基礎だからね

361:デフォルトの名無しさん
11/02/10 02:17:04
そんなことないよ。
コンピュータの基礎でもないし、Cができないプログラマもいるよ。

362:デフォルトの名無しさん
11/02/10 02:26:57
>>354
ありがとうございます。何とかやってみます

363:デフォルトの名無しさん
11/02/10 02:32:36
>>361
新卒や派遣スクリプタさんは別として
畑違いの部署の若い子やおじちゃんでも
プログラマでCすら出来ない人は出会った事ないなー
間引きされてるのかな

364:デフォルトの名無しさん
11/02/10 02:36:49
一時期はVBしかできないプログラマが相当数量産されたが、彼らは今どうしているのだろうか

365:351
11/02/10 02:52:53
気軽に出来るCでできるアルバイトないですか?
仕事だとハードル高くなるので、"能力主義"という
一般論で収まるんで。




366:デフォルトの名無しさん
11/02/10 02:54:47
>>351の駄目人間っぷりが容易に想像できる

367:デフォルトの名無しさん
11/02/10 02:56:07
>>365
Cは書けて当たり前ですからね・・・


368:デフォルトの名無しさん
11/02/10 04:48:17
>>364
java やってはるんやないですか?

369:デフォルトの名無しさん
11/02/10 08:04:39
Cだけとかアホだろ。
組み込みでもやってろ

370:デフォルトの名無しさん
11/02/10 10:47:17
>>364
VBで作られたプログラムがあまりにも多かったために保守要員が残されているらしい

371:デフォルトの名無しさん
11/02/10 12:11:48
らしいね

372:デフォルトの名無しさん
11/02/10 12:57:41
755 :まちがって名前消しちゃいました。:2011/02/10(木) 00:02:34 ID:???
線形リスト構造の使い方について質問です。
URLリンク(codepad.org)
1. mallocの使い方はあっていますか。
2. 解放はちゃんとできていますか。
どうぞよろしくお願いいたします。


756 : ◆QZaw55cn4c :2011/02/10(木) 04:46:12 ID:???
>>755
free()忘れはないですし、いいと思います。
念入りに書くのだったら、malloc() の返り値が NULL かどうかチェックして、
NULL, すなわち malloc() が失敗したときには、たとえばエラーメッセージを表示して中断する、とかするのもいいかもしれません。


757 :まちがって名前消しちゃいました。:2011/02/10(木) 09:49:04 ID:???
>>755です。
mallocのエラー処理はあった方がいいんですね。
線形リスト構造はややこしくてこんがらがっていましたが
ちょっと自信つきました。添削アドバイスありがとうございました^^

373:デフォルトの名無しさん
11/02/10 14:04:14
位相空間と距離空間の違いを教えてください

374:デフォルトの名無しさん
11/02/10 15:59:34
俺みたいな高脳ならともかく、このスレの低脳どもに答えられるわけがないだろうw

375:デフォルトの名無しさん
11/02/10 16:16:19
位相空間とは位置の相をあらわす空間
距離空間とは距離の空間をあわらす

376:デフォルトの名無しさん
11/02/10 16:22:33
わかりやすく例えると位相空間はラーメン
距離空間はハンバーガーと思えばいい

377:デフォルトの名無しさん
11/02/10 17:30:01
井include<stdio.h>
int main(void)
{
int i,t;
scanf("%d\n",t)
printf("%d\n",i+t);
return 0;
}

エラーがでます・・・何故でしょうか?

378:デフォルトの名無しさん
11/02/10 17:31:55
頭悪い奴が頑張っても
面白くないよ

379:デフォルトの名無しさん
11/02/10 17:32:52
あ、すいません・・
scanf("%d\n",t);
にしたら解決しました。エラー出ませんでした。
質問取り下げます。

380:デフォルトの名無しさん
11/02/10 17:42:16
面白いねー

381:デフォルトの名無しさん
11/02/10 17:50:57
面白い面白い

382:デフォルトの名無しさん
11/02/10 18:39:29
>>379
次の質問が出てくるものだと待ってたのに裏切られた気分

383:デフォルトの名無しさん
11/02/10 18:56:09
限られた範囲の数値をランダムに並べ替えたいのですが、
有効なアルゴリズムみたいなのありますか?

int num[10] = {1, 2, 3 … 8, 9, 10}を
3 9 5 8…みたいに並べ替えたいです。

384:C言語の事なら俺に聞け(入門編) part78
11/02/10 18:58:33
>>377
#include<stdio.h>
int main(void)
{
int i=0,t;
scanf("%d\n",&t);
printf("%d\n",i+t);
return 0;
}

一応こんな感じにね。


385:デフォルトの名無しさん
11/02/10 19:08:46
>>384

386:デフォルトの名無しさん
11/02/10 19:56:00
System.out.println("C言語");

387:デフォルトの名無しさん
11/02/10 20:07:56
1["OOO"]='A';

388:デフォルトの名無しさん
11/02/10 20:15:16
有吉は「イヤイヤイヤ、俺は別にそんなにキライじゃないからね。怖いなぁって思いつつ」とフォローしているが、確かにメディアでの発言のすべてを本気にされ、問題視して大袈裟に騒ぎたてられては、芸人たちはたまったものでもないだろう。
たとえば品川だけでなく、NON STYLEの井上裕介も「ナルシスト」「ウザい」などと叩かれがちだが、あくまでもネタであり、キャラだ。
品川の「ウザさ」も、山里の「キモさ」も、有吉の「毒舌」も、すべてを真剣に受け止めて批判に終始するような視聴者は、お笑いを楽しめていると言えないのではないだろうか。

389:デフォルトの名無しさん
11/02/10 20:18:52
お笑いを楽しめていると言えないのではないだろうか(キリッ

390:デフォルトの名無しさん
11/02/10 22:47:09
お笑い

391:デフォルトの名無しさん
11/02/10 23:15:35
>>383
for(i = 10; i > 1; ) {
j = rand() % i--;
tmp = num[j];
num[j] = num[i];
num[i] = tmp;
}



392:デフォルトの名無しさん
11/02/10 23:30:12
>>391
ありがとうございます。

393:デフォルトの名無しさん
11/02/11 00:38:45
一周だけだと微妙な気がする

394:デフォルトの名無しさん
11/02/11 00:48:34
>>392
for(i = 0; i < 10; i++) {
j = rand() % (i + 1);
num[i] = num[j];
num[j] = i + 1;
}
ってやれば空の配列に数字を入れながらランダムにできる

395:デフォルトの名無しさん
11/02/11 00:59:15
>>393
確率計算すると1周でいいんじゃなかったか

396:デフォルトの名無しさん
11/02/11 03:16:01
>>394
ダウト

for(i = 0; i < 10; i++) {
/* ランダムに配置されている配列の最後に値を追加 */
num[i] = i + 1;
/* 最後の要素以外は全てランダムになっているので最後の要素のみ入れ替える */
j = rand() % (i + 1);
tmp = num[j];
num[j] = num[i];
num[i] = tmp;
}


397:デフォルトの名無しさん
11/02/11 03:20:14
いずれにしても糞コード

398:デフォルトの名無しさん
11/02/11 03:22:05
>>396
コードの意味が理解できなアホは引っ込んでろw

399:デフォルトの名無しさん
11/02/11 03:24:19
小手先にこだわる人っているよね
学生さんかな

400:デフォルトの名無しさん
11/02/11 03:25:42
無駄な入れ替えを省略することは小手先とは言わないw

401:デフォルトの名無しさん
11/02/11 03:29:55
>>398
>ってやれば空の配列に数字を入れながらランダムにできる
人に噛み付く前に、よく考えな
明らかに数字を入れる前にnum[j]を使ってる

402:デフォルトの名無しさん
11/02/11 03:33:37
>>400
それ、十分小手先だよ

403:デフォルトの名無しさん
11/02/11 03:35:15
理解できないバカどもは>>394>>396を乱数の種を同じにして実行してから書き込んでくれw

404:デフォルトの名無しさん
11/02/11 03:38:33
>>403
>>394は初期化前の変数を読み出している
で、その場合、C言語での動作は未定義
小手先に走る前に、基本をもっと身に着けろ

405:デフォルトの名無しさん
11/02/11 03:42:24
初期化されてない変数を使うのは未定義じゃねーだろw

406:デフォルトの名無しさん
11/02/11 03:44:05
>>406
未定義だよ

407:デフォルトの名無しさん
11/02/11 03:46:38
>>406
自己参照構造体乙

408:デフォルトの名無しさん
11/02/11 03:50:11
未初期化変数の値は不定であって、未定義ではない
>>394の場合
j < iの場合ならすでに内容があるし、i==jの場合なら不定の変数を代入してるが同じ場所だし、
直後にi+1を代入してるので問題ない

409:デフォルトの名無しさん
11/02/11 03:51:13
でも糞コードだよね

410:デフォルトの名無しさん
11/02/11 03:53:31
914 :デフォルトの名無しさん:2011/02/06(日) 17:00:59
そんな話は聞いたことないけどしたいならそうすればいいんじゃない?
それより、 i * 10 + 9 + ( i == 9 ) は意図したとおりに動かないね。

920 :デフォルトの名無しさん:2011/02/06(日) 17:34:11
問題ないように思える人はもう一度Cの規格票をよく読むんだ^^

923 :デフォルトの名無しさん:2011/02/06(日) 17:38:32
…というのも不親切なので答えをいうと
i == 9の部分はtrueの時1になることを想定しているけど
(90-100の階級幅だけ11あるので、ここだけ特別処理にしている)
Cの規格上はtrueは0以外の整数であればなんでもいいことになっているので
実装にっては「90-100」のような表示にならない可能性があるってことなのよ^^;
ここは

printf( "%d-%d %d人\n", i * 10, i == 9 ? 100 : i * 10 + 9, cv[ i ] );

のようにすべきでした。

924 :デフォルトの名無しさん:2011/02/06(日) 17:41:11
って、答えを書いているうちに即レスするんじゃない貴様ら^^

ちなみに、この「trueは0以外の整数」というのは
Cではけっこう重要な落とし穴なので初学者は覚えておくといいよ^^

929 :デフォルトの名無しさん:2011/02/06(日) 17:44:46
あれ?そうだっけ?すまんすまん^^ワラ

935 :デフォルトの名無しさん:2011/02/06(日) 17:49:37
こうして人は成長していくのであった^^;

411:デフォルトの名無しさん
11/02/11 03:53:39
>>408
不定じゃなくて未定義だ
たまたま動いても、コンパイルエラーでも、実行時エラーでも構わない。
つーか、暫く2ch見てなかったけど、
テンプレから初心者用FAQはなくなったのか?

412:デフォルトの名無しさん
11/02/11 03:54:09
>>409
◆QZaw55cn4c乙

413:デフォルトの名無しさん
11/02/11 03:54:57
>>408
値は不定だけど未初期化領域へのアクセスは未定義

414: ◆QZaw55cn4c
11/02/11 04:03:09
>>408
初期化されてない auto 変数の読み出しは、未定義。それによりプログラムが落ちても文句はいえない。
解説はフィンローダさんところがいいでしょう。
URLリンク(www.st.rim.or.jp)

415:デフォルトの名無しさん
11/02/11 04:04:05
>>394はこう書けばいいのかな
for(i = 0; i < 10; i++) {
j = rand() % (i + 1);
if(j != i) num[i] = num[j];
num[j] = i + 1;
}

最初にnum[10] = {0};ってやったほうが楽そうだ

416:デフォルトの名無しさん
11/02/11 04:05:42
>>415
条件分岐で処理速度が落ちるから小手先テクの意味ないじゃん

417:デフォルトの名無しさん
11/02/11 04:10:25
カキコしているランダムに並べ替えは、
限られた範囲の数値が10から20や、-20から-10や、-10から10
てかみたいに、intで表せる任意の(連続)範囲ならどこでもOKなの?

418:デフォルトの名無しさん
11/02/11 04:12:31
>>415
やるなら、こんな感じ。

for(i = 0; i < 10; i++) {
j = rand() % (i + 1);
num[i] = 0;
num[i] = num[j];
num[j] = i + 1;
}

でも、可読性が悪いため、他の人に
「num[i] = 0;」を消されるかも知れないので、お勧めできない。


419:デフォルトの名無しさん
11/02/11 04:13:36
>>414
おい、おまえ、限られた範囲の数値をランダムに並べ替えやってみそ


420:デフォルトの名無しさん
11/02/11 04:14:45
394 :デフォルトの名無しさん:2011/02/11(金) 00:48:34
>>392
for(i = 0; i < 10; i++) {
j = rand() % (i + 1);
num[i] = num[j];
num[j] = i + 1;
}
ってやれば空の配列に数字を入れながらランダムにできる

421:デフォルトの名無しさん
11/02/11 04:15:10
>>417
>>391ならOK

422:デフォルトの名無しさん
11/02/11 04:15:32
空の配列って書いてあるからもしかしたら、0で初期化してあるのかもしれないw

423:デフォルトの名無しさん
11/02/11 04:17:56
J.2 Undefined behavior
1 The behavior is undefined in the following circumstances:
The value of an object with automatic storage duration is used while it is
indeterminate (6.2.4, 6.7.8, 6.8).

424:デフォルトの名無しさん
11/02/11 04:20:06
行列演算ならまだしもただの並び替えなら、俺は読みやすい方を採用するかな

425:デフォルトの名無しさん
11/02/11 04:33:05
>>410
比較演算の結果は0か1になることが保障されてるって突っ込みが抜けてるから
「i * 10 + 9 + ( i == 9 ) は意図したとおりに動かないね。」が正しいように見えるわな

426:デフォルトの名無しさん
11/02/11 04:33:12
ここで再登場して、変数を宣言と同時に0で初期化しないアホがいるなんてwとか言ってくれたら面白いのに

427:デフォルトの名無しさん
11/02/11 04:37:33
>>425
そこは923で丁寧に説明されてるからおk

428:デフォルトの名無しさん
11/02/11 04:37:35
num[]はグローバル変数ですよ。
初期化する必要なんてありません。

429:デフォルトの名無しさん
11/02/11 04:44:13
Javaの質問ですけどいいですか?

430:デフォルトの名無しさん
11/02/11 04:44:14
◆QZaw55cn4cはこれだけ住人に嫌われているのにのうのうと平気な顔で
出てこれる神経が分からん
アスペも混ざってるな

431:デフォルトの名無しさん
11/02/11 04:47:51
>>429
お前さんスゲーナ

432:デフォルトの名無しさん
11/02/11 04:50:57
小型数列なら配置用の配列を使うかな
static int sr[3][10]={{9,2,5,…}.{4,9,7,…},{0,5,4,…}};
#define F(a,b,c) (b[0]=a[0], b[1]=a[1],…,c=&sr[rand()%3],a[0]=b[*c[0]],…, a[9]=b[*c[9]],a)

int num[10]={0,1,…},tmp[10],(*mxr)[10];
F(num,tmp,mxr);

433:デフォルトの名無しさん
11/02/11 04:56:19
>>432
マクロ長すぎ
素直に関数にして下さい

434:デフォルトの名無しさん
11/02/11 05:07:50
>>432
最高にキモイな!うほ!

435:デフォルトの名無しさん
11/02/11 05:57:44
「鬼は捕らえた娘をイヤーぶちぬいたんあぁ」ってなんですか


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch