トップページ⇒tech
1001コメント331KB

C言語なら俺に聞け(入門篇) Part 11

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/04/17(火) 18:01:23
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 10
http://pc11.2ch.net/test/read.cgi/tech/1174290325/

過去スレ
Part 1 http://pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 http://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 http://pc8.2ch.net/test/read.cgi/tech/1160682950/
Part 4 http://pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 http://pc8.2ch.net/test/read.cgi/tech/1165022193/
Part 6 http://pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 http://pc10.2ch.net/test/read.cgi/tech/1170064980/
Part 8 http://pc11.2ch.net/test/read.cgi/tech/1171946674/
Part 9 http://pc11.2ch.net/test/read.cgi/tech/1173284217/

関連スレ
C/C++の宿題を片付けます 85代目
http://pc11.2ch.net/test/read.cgi/tech/1175129517/
くだすれC言語(初心者用) Part.2
http://pc11.2ch.net/test/read.cgi/tech/1172099763/
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
http://pc11.2ch.net/test/read.cgi/tech/1170338926/
【初心者歓迎】C/C++室 Ver.36【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1175436073/

【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
01531372007/04/21(土) 03:24:44
>>152
ありがとうございます。変数headはポインタですが、
この場合addUser関数に対して参照渡しとならないのでしょうか?
0154デフォルトの名無しさん2007/04/21(土) 03:38:04
cには参照渡しがないので、ポインタだろうと値渡しされる。
0155デフォルトの名無しさん2007/04/21(土) 03:39:43
>>151
入力関数も分けておこうや。
01561372007/04/21(土) 03:45:51
>>154
参照渡しまでも勘違いしているかも…。
headにはアドレスが渡り、そのアドレスが
NULLから別のアドレスに変わると思っていました。
値渡し…よく分からなくなってきました。
0157デフォルトの名無しさん2007/04/21(土) 04:05:45
>>151のソースをいじっていたら
すっきりどころか無駄に長くなったように見える
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3847.txt
0158デフォルトの名無しさん2007/04/21(土) 04:11:25
いんや、元のよりはずっとわかりやすいよ。

ただし
 else if (d == 0.0) /* 判別式D=0 */
と
 else if (pSolutions->d == 0.0) /* 判別式D=0 */
はいただけない。とは思うものの宿題レベルだからこれでいいのかな…。
0159デフォルトの名無しさん2007/04/21(土) 05:02:44
>>156
先ずは>152で指摘されたことをやってみよう。
0160デフォルトの名無しさん2007/04/21(土) 07:12:34
>>158
>いんや、元のよりはずっとわかりやすいよ。

だから「ように見える」と言ったわけで。
「無駄に長い」という言葉から察するに
おそらく>>150の期待していたすっきり感には当てはまらないだろうが、
可読性はそういう初心者の主観的直観的なものとは別のところにあるということを匂わせたつもり。
0161デフォルトの名無しさん2007/04/21(土) 15:52:00
線形リストを再帰関数を使って全削除するプログラムを考えているのですが、
currentの直前のリストのnextにNULLが入ってくれません。(�@の処理)
どうすればNULLを入れられるでしょうか?

void deleteAllList(LIST *node)
{
 LIST *current;

 current = node;

 if(current != NULL){
  deleteAllList(current->next);

  free(current->name);
  free(current->specialty);
  free(current);
  current = NULL; … �@
 } else{
  return;
 }
}
0162デフォルトの名無しさん2007/04/21(土) 16:04:41
>>161
えーと
void foo(int bar) {bar = 1;}
があったときに

int baz = 10;
foo(baz);
printf("%d", baz); // 10が出る

のと同じ理由でそれでは直前のnextにNULLは入りません。
多分、deleteAllList(baka->next);って呼んでるんだよね。

LIST型が双方向リストじゃない限りその関数の中から直前の
ポインタを求めることはできないから(始点を別に持ってたら別だけど)、
ひとつまえのポインタを渡すようにしてやればいいんじゃないかな。
0163デフォルトの名無しさん2007/04/21(土) 16:10:49
こんな感じ。関数の冒頭で
current = nodeとなっているのをcurrent = node->next;に書き換え、
current = NULL;とやっているところを、node->next = NULL;
に書き換えればいい。

もちろんdeleteAllListを呼んでいるところは全部ひとつ前のポインタを
渡すように書き換える必要がある。deleteAllList(baka->next);とやっていたとしたら、
deleteAllList(baka);のように。
0164デフォルトの名無しさん2007/04/21(土) 20:17:49
質問です。
このc言語のプログラムを動かしたいのですが、うまく動きません。
プログラミングは初めてで、あまり詳しく分からないです・・・。

pastとnowとfutureとdvとvfという小数の変数を使ってfutureを求めたいです。
コンパイルしようとすると変数のtypeが違うかconflictingがどうとかでます。あと、main関数の返り値がint型でないと
言われるのですが・・・。 どう改善したらうまくいくのか教えて頂ければうれしいです。 
よろしくお願いします

#include <stdio.h>
float past,now,future,dt,vf;

vf=1;
dt=0.01;
now=vf*dt-1;
past=-1;
float verlet(void)
{
2*now-past-4*now*(now*now-1)*dt*dt;};
float main(void)
{
printf("past=%f,now=%f",past,now);
future=verlet(void);
printf("future=%f",future);
}
0165デフォルトの名無しさん2007/04/21(土) 20:20:20
>>164
>コンパイルしようとすると変数のtypeが違うかconflictingがどうとかでます

せっかくコンパイラが親切に、エラー内容を教えてくれてるのに
無視しないで具体的に書いてよ
0166デフォルトの名無しさん2007/04/21(土) 20:26:33
>>164
ついでに言うと、どう直せばいいのか以前に無茶苦茶すぎる
おとなしく基本から順にやった方がいいよ

・main の戻り値を float じゃなくて int にする
・verlet の定義の最後の } の後の ; はいらない
・verlet に return がない
・以下の部分は main の中に移動
>vf=1;
>dt=0.01;
>now=vf*dt-1;
>past=-1;

などなど
0167デフォルトの名無しさん2007/04/21(土) 20:44:04
どこ直すとかっていうレベルじゃねーっていうか、ほぼ全行に突っ込み所あるのって珍しいぞ。
とりあえず数時間まともに入門サイトでも読んできたら?
0168デフォルトの名無しさん2007/04/21(土) 22:07:48
>>163
指摘の通り、前のリストのnextを持たせてやる事で
NULLを入れてやることができました。
ありがとうございました。
0169デフォルトの名無しさん2007/04/21(土) 22:31:54
>>164
これは釣りか?釣りなのか?
マジなら、まず人のソースを読め。
#include <stdio.h>
float past, now, future, dt, vf;

float varlet(void)
{
return 2.0f*now-past-4.0f*now*(now*now-1.0f)*dt*dt; /* 戻り値がvoid以外ならreturn書け!*/
}

int main(void) /* mainは、今のうちは呪文のように←のように書け */
{
vf = 1.0f; /* 代入と計算は関数の中でしろ。少なくとも今のうちは */
dt = 0.01f;
now = vf * dt - 1.0f; /* vf * dt - 1; でも悪くも無いが、今のうちは型を統一しとけ! */
past = -1.0f; /* これも! */
printf("past=%f,now=%f\n",past, now); /* \nは要らないけど次の文字列とくっついちゃうだろ */
future = verlet();
printf("future=%f",future);
return 0; /* 今のうちは付けとけ */
}
0170デフォルトの名無しさん2007/04/21(土) 22:35:25
>>169の本人です。このたびは偉そうにソースを晒してすみません。
元はといえば、甘やかして育てた母が悪いのです。
でも、立派な社会人で幸せな家庭を築いていますので、許してやってください。
0171デフォルトの名無しさん2007/04/21(土) 22:35:55
こういうレベルでCを使うならなら、
浮動小数点数は常にdoubleを使っておけばよいと思う。
0172デフォルトの名無しさん2007/04/22(日) 00:02:11
変数名ってもしかして頭文字が数字だったらダメなの?
0173デフォルトの名無しさん2007/04/22(日) 00:03:35
当然
01741722007/04/22(日) 00:08:19
/(^o^)\ナンテコッタイ

>>173
即レスアリガトン
0175デフォルトの名無しさん2007/04/22(日) 00:28:46
------------------
a.txt

**A**
**B**
**C**
・
・
・

-------------------
b.txt

A
B
C
・
・
・
-------------------

b.txtのAをa.txtのAに挿入
b.txtのBをa.txtのBに挿入
b.txtのCをa.txtのcに挿入

するプログラムのソース作れる方いますか?
0176かなり初心者2007/04/22(日) 00:35:00
#include <stdio.h>#include <stdlib.h>
void moji (int);int heikin(int,int);
int main(int argc, char *argv[])
{ int kazu;
int x,y;
while(1){ printf("値1を入力:");
scanf("%d",&x);moji(x);
if (x<0){break;}
printf("値2を入力:");
scanf("%d",&y);moji(y);
kazu=heikin(x,y);
printf("平均%d\n",kazu);
moji(kazu);}
system("PAUSE");
return 0;}
int heikin(int a,int b){
int hei;
hei=(a+b)/2;
return hei; }
void moji (int a){
if (a>=60){
printf("合格%d\n",a);
}else{
printf("不合格%d\n",a);
}}
このプログラムで終了時「不合格−1」と表示されないようにしたいです。
どなたか教えてください。
0177デフォルトの名無しさん2007/04/22(日) 00:53:08
>moji(x);
と
>if (x<0){break;}
を入れ替えたらいいんじゃね?
01781642007/04/22(日) 02:01:56
>>165 >>166 >>167 >>169

ありがとうございます。ホンマすいません。今大学4回生で研究室配属になって
同級生たちは皆プログラムできるから基礎の説明とばされて、課題だされてちょっと勉強してやってみたんですが
こんなアリサマでした・・・。提出火曜で(出題は金曜)土日は研究室にだれもいなくてきけなくて困ってたのです。。。

returnの使い方がいまいち分からないのですがあとは分かった気がします。returnは数学でいうところの
f(x)=の部分ってことで、プログラムの関数のカッコの中が数学でいうところの関数の中身って感じでいいんですかね。。。
0179デフォルトの名無しさん2007/04/22(日) 02:04:42
つっこみたいけどまぁいいや
0180デフォルトの名無しさん2007/04/22(日) 02:23:07
まあ、似たようなもんだ。
0181デフォルトの名無しさん2007/04/22(日) 02:24:59
即席で使えるレベルまで覚えさせるつもりだった言語がCってまたハードだな
0182デフォルトの名無しさん2007/04/22(日) 02:34:32
春休みの内に何とかしておくべきだったな
0183デフォルトの名無しさん2007/04/22(日) 03:06:53
2147483647+1 = -2147483648

このようになる理由がわからない。教えてください。
0184デフォルトの名無しさん2007/04/22(日) 03:14:23
7fffffff+1 = 80000000
0185デフォルトの名無しさん2007/04/22(日) 03:38:14
>>183
2^31=2147483648
2^32(値の上限は2^32-1)を2進数で表して、先頭の32桁目を1か0で符号として扱い
+-で半分に分けて使っていることに関して理解していりゃ、あとは
>>184 の理屈で16進数に置き換えて -2^31 が 80000000
FFFFFFFF が-1というのが分かれば良いかと。
0186デフォルトの名無しさん2007/04/22(日) 03:49:57
すいません

3×3のマスでたとえば
 111
1□□□
1□□□
1□□□
となっていればこれの条件を満たすのは
 111
1■□□
1□■□
1□□■
 111
1□□■
1□■□
1■□□

となりますがこのように縦横彫るマスの数だけを与えて
それを満たすすべてのパターンを出力ってできますか
0187デフォルトの名無しさん2007/04/22(日) 03:55:14
4×4など大きくなっても対応できるように、お願いします
ピクロスではありません。
0188デフォルトの名無しさん2007/04/22(日) 04:14:28
枝刈りのない全数探索ならそんなに難しくはないと思うが。
その横軸と縦軸に並んでいる数字も変化するんだよな?
0189デフォルトの名無しさん2007/04/22(日) 05:40:19
ちょっとやってみてるけどややこしいwww
0190デフォルトの名無しさん2007/04/22(日) 07:46:58
ちょっとやってみた。単純に総当たり。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3851.c
なんか上手いやり方ないんかな。
01911892007/04/22(日) 07:54:14
>>190
速いなー。なんかおれ、気づいたらビールを飲み始めてしまっていてリタイアw
てかなんかおれの書きかけのコードよりはるかに短い…。
0192デフォルトの名無しさん2007/04/22(日) 18:01:32
#include <stdio.h>
int func(void){
static int a=0;
return ++a;
}

main(){
int b,i;
for(i=0;i<3;++i)
b=func();
printf("%d",b);
}

何故これの結果が3になるのかがわからりません。
2回目,3回目のfunc関数呼び出しでは、static変数になっててもa=0になるから
returnはずっと1だと思ったんですが違うようで・・お願いします
0193デフォルトの名無しさん2007/04/22(日) 18:02:58
>>192
static int a=0;は一度しか初期化されない
2回目以降は前回の値を保持している
0194デフォルトの名無しさん2007/04/22(日) 18:04:33
>>193
一度しか初期化されないんですか。謎が解けました!。ありがとうございました
0195デフォルトの名無しさん2007/04/22(日) 18:38:01
>>194
static変数とグローバル変数だけだぞ。

int func(void){
int a=0;
return ++a;
}

だと、関数が呼び出される度にa=0で初期化されるからな。念のため
0196デフォルトの名無しさん2007/04/22(日) 18:48:25
>>195
了解しました。auto変数は毎回初期化されるんですね
0197デフォルトの名無しさん2007/04/22(日) 19:16:37
正確には「自動で初期化はされないから自分でやれ」
0198デフォルトの名無しさん2007/04/22(日) 20:17:42
関数内のstatic変数は、スコープ(可視範囲)が関数内であるだけで、外にあると
思うと分かりやすいかな。
その関数専用で外部に見せる必要がない管理データを持つのに使ったりする。
0199かなり初心者(176)2007/04/22(日) 22:35:34
>>177さんありがとうございました
しかし、どうして入れ替えただけでいいんでしょう?
まったく基礎ができてないやつです。
0200デフォルトの名無しさん2007/04/22(日) 22:54:06
>>199
プログラムは基本、上から順に実行されるんだから
上から順に追っていってみなよ
02011992007/04/22(日) 23:12:41
>>200さんありがとうございます。かなり基本的なこと聞きます。
int mainの中に入れないといけないプログラムと
{}の外に書くプログラムの違いってなんですか?
参考書見てまんま書き写しているだけなんで、教えてください。
0202デフォルトの名無しさん2007/04/22(日) 23:26:29
一般的には特定の処理をする部分を分けて書いた方が見通しがいいから
別の関数に書き出してそれをmain関数から呼び出すことで特定の処理をmain関数から追い出す
後で再利用することもできるので何度も書く手間も省ける
0203デフォルトの名無しさん2007/04/22(日) 23:50:21
>>201
教えようにも、君に分かるように教えるのはたぶん無理

足し算引き算すら知らない幼稚園児に、高校数学の微積を教えることが出来るか?
そーいうことだ
0204デフォルトの名無しさん2007/04/23(月) 00:41:38
>>202
うちじゃへぼSEのせいで1プロジェクトが終わっても再利用できるものは何もないという有様w
0205デフォルトの名無しさん2007/04/23(月) 01:35:16
>201
>int mainの中に入れないといけないプログラムと
>{}の外に書くプログラムの違いってなんですか?

main関数とは限らないけどソースに直接書くのは
宣言か関数定義だけ。
関数の外に文を書くことはできない。
行頭が#で始まる。プリプロセッサ命令はC言語の文法とは全く別。
0206デフォルトの名無しさん2007/04/23(月) 02:40:40
お前らの突っ込みはもっともだけど、多少はエスパーしてあげようよ…
0207デフォルトの名無しさん2007/04/23(月) 02:51:19
だがこの辺を説明しようとすると、うぜえ、よそへいけ、
って一斉につっこみが入るくらい長文かつややこしい説明になるんじゃないかなあ…
0208デフォルトの名無しさん2007/04/23(月) 06:02:23
そんなコードが参考書に載ってるとはとても思えんな。。。
0209デフォルトの名無しさん2007/04/23(月) 12:28:03
多分、参考書はソース全体を書いてあるんじゃなくて
一部を抜粋してるだけなんじゃないかな
それをmainの外だと勘違いしてるのだと思う
0210デフォルトの名無しさん2007/04/23(月) 12:59:34
質問です
戻り値がint*型の関数は
*を付ければ代入式の左辺にしてもいいですか?
struct p{
 a[10];
 b[10];
};
int *f(struct p *x, int i){
 if(i<10){
  return x->a[i];
 }else{
  return x->b[i-10];
 }
}
int main(void){
 int i;
 struct p *x;
 for(i=0;i<20;i++){
  *f(i)=i;
}
 return 0;
}
02112102007/04/23(月) 13:00:39
f(x,i)
0212デフォルトの名無しさん2007/04/23(月) 13:03:29
>>210
らめぇ
0213デフォルトの名無しさん2007/04/23(月) 13:30:41
>>210
一概には言えない。そのコードの場合は、それ以前の段階でダメ。
0214デフォルトの名無しさん2007/04/23(月) 14:43:14
メモリ確保せずに構造体の中身弄るなんてなかなか感じさせてくれるじゃない
0215デフォルトの名無しさん2007/04/23(月) 15:24:23
オマイ等のお陰で、C言語の基礎が概ね理解できた。
今、専門学校でデータベースやXMLやっててCやったせいか理解しやすい
皆、ちんぷんかんぷだ。俺はすんなり入る。
オマイ等、サンクス!オマイ等に光あれ!
0216デフォルトの名無しさん2007/04/23(月) 15:38:26
おれアンデッドだから、光はちょっと勘弁。
0217デフォルトの名無しさん2007/04/23(月) 16:10:44
>>215
それはお前が頑張った証拠だ
感謝するなら自分のやる気に感謝しとけw
0218デフォルトの名無しさん2007/04/23(月) 17:07:01
質問ですが
このプログラムを起動して最初に58を入力したらいきなり画面が黒くなってオーバーなんとか
って表示されてPCがうんとも寸ともいわなくなって強制終了したんですが
そうなった原因は何かわかりますか?

#include <stdio.h>
void sa(int *ko);
int main(void)
{
int i,te[10];
for(i=0;te[i]!=-1;i++){
printf("数字を入力(100以内)\n");
scanf("%d",&te[i]);
while(te[i]>100){
printf("やり直し\n");
scanf("%d",&te[i]);}}
sa(te);
return 0;
}
void sa(int *ko)
{
int i=0;
while(ko[i]!=-1){
printf("%d\n",ko[i]);
i++;}}
0219デフォルトの名無しさん2007/04/23(月) 17:17:08
>>218
色々と突っ込みどころだらけで恐らくは期待した通りには動かないだろうとは思うけど、
いきなり画面が黒くなったりうんともすんとも言わなくなるとは思えないな。
0220デフォルトの名無しさん2007/04/23(月) 17:17:17
te[i]に何も入っていない段階で-1と比較しているからだと思うが。
0221デフォルトの名無しさん2007/04/23(月) 17:21:31
>>219
scanf の落とし穴に引っかかっても
画面が(ry になるような感じじゃないものな
0222デフォルトの名無しさん2007/04/23(月) 17:34:44
そうか、teの初期値によってはスタックオーバフローするのか。
0223デフォルトの名無しさん2007/04/23(月) 17:37:49
再帰じゃないし、スタックオーバーすることある?
# 不正アクセスはあるけど
0224デフォルトの名無しさん2007/04/23(月) 17:38:28
スタックオーバーフローはしないんじゃね?
0225デフォルトの名無しさん2007/04/23(月) 17:44:05
条件がそれば&te[i]が進みすぎて、9x系ならアクセスバイオレーションでBSoD出たりするんじゃね?
0226デフォルトの名無しさん2007/04/23(月) 18:10:40
scanf でどこかのメモリが破壊されて、
それがスタートアップルーチン用の何かの情報を壊して
その影響で再帰呼び出しか巨大なスタック領域の確保が
行われたりとか?
0227デフォルトの名無しさん2007/04/23(月) 18:32:52
Cコンパイラの評価について質問です。
if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) > 0)
の文の場合、socket(PF_INET, SOCK_STREAM, 0)が評価され、
次にsockfd = socket()の代入文が評価されるのは理解しています。
その次にif((代入文) > 0)の評価なのですが、どのように評価されるのでしょうか?
代入文で代入された値と0が評価されるのでしょうか?

また別の質問なのですが、
if((int_a = funcA()) > (int_b = funcB()))
の文は何から評価されるのでしょうか?
funcAかfuncBのどちらが先に評価されるのでしょうか?
0228デフォルトの名無しさん2007/04/23(月) 18:33:06
権限ないところに書き込もうとしたらそれだけで青画面出たりするだろ。
0229デフォルトの名無しさん2007/04/23(月) 18:37:27
>>227
socket() の戻り値が0を超えるかという評価
0230デフォルトの名無しさん2007/04/23(月) 18:40:02
>>227
http://www.kouno.jp/home/c_faq/c3.html
02312102007/04/23(月) 18:46:58
携帯で書いてる途中で休み時間が終わってしまったので
慌てて見直さずカキコしちゃいました(汗

mallocを書き忘れましたけど、
*をつけて左辺に置いてはいけない例を
お願いします
02322102007/04/23(月) 18:50:37
aとbにintつけるのも忘れてたorz
0233デフォルトの名無しさん2007/04/23(月) 18:52:12
>>232
何を知りたいのかよく判らんから、具体的な質問にしてくれ。
0234デフォルトの名無しさん2007/04/23(月) 19:23:12
char str[] この[]の中に数字が入るときがありますよね。char str[20]とか。
この数字の意味が分からないのです。いやなんとなく分かるんですが、バシっと分かりません。
しかも[]の中の数字なんて無くても良いと思うのですが。

どんな時に使うのですか?

すいません、基本的なことで。

お願いします。
02352322007/04/23(月) 19:24:18
>>233
>>213さんに、一概には言えない、と言われたから、どんなときに
戻り値がint*型の関数を代入式の左辺に
*をつけて使ってはいけないのか
教えてください(--;)
0236デフォルトの名無しさん2007/04/23(月) 19:25:41
その戻り値が指す先が合法ではないとき。
0237デフォルトの名無しさん2007/04/23(月) 19:30:00
>>234
確保する領域の大きさを自分で決めたいときにつかいますよー
scanfで文字列を読み込んだり
文字列をstrcatで繋げたり
sprintfで文字列を作るときに
領域が用意されてないと大変になります(--;)
0238デフォルトの名無しさん2007/04/23(月) 19:31:48
>>234
char を20個確保
int a[15] なら int を15個確保
0239デフォルトの名無しさん2007/04/23(月) 19:37:30
>>234
宣言するときに
char a[]="text";
のように初期化する文字列があれば
括弧のなかには数字は無くても
文字数+1の領域が用意されます。
char a[];
だけだと領域の大きさが分からないからダメです。
関数の引数で
char a[]
と書かれてるときはポインタとして扱われて
char *a
となります。

多分こんなかんじだと思う(--;)
0240デフォルトの名無しさん2007/04/23(月) 19:37:59
>>235
関数がNULLを返すとき。
関数が無効なポインタを返すとき。
変更不能なオブジェクトを指しているポインタを返すとき。
02412272007/04/23(月) 19:41:51
つまり条件分岐文は左から右に評価されるのが決まりであるという事ですよね。
参考になるページを貼っていただいて助かりました。
なんとか理解できそうです。
0242デフォルトの名無しさん2007/04/23(月) 19:43:29
>>241
条件分岐文ってのが何を意味してるのか今ひとつわからんが、
一般的には左から右に評価されるわけじゃないぞ
0243デフォルトの名無しさん2007/04/23(月) 19:44:24
>>237,>>238,>>239
ありがとうございます!

バッチリ理解できました。

調べても答えが見つからなくて困ってました。

本当に助かりました。ありがとうございます。

これで先に進めます♪
0244デフォルトの名無しさん2007/04/23(月) 19:45:25
文字列じゃなくてchar型の配列として考えるなら
char a[16]="0123456789abcdef";
printf("%1s\n",a[i])
みたいに文字数ぴったりで宣言することもある
(--;)と思う
02452352007/04/23(月) 19:49:56
>>240
つまり普通にポインタを扱うときと同じ注意をすればいいんですね。(--;)
あと関数内の静的じゃない変数のポインタもダメですね
ありがとうございました
0246デフォルトの名無しさん2007/04/23(月) 19:50:42
>>241
ここの一番下14-5を見るといい
http://www9.plala.or.jp/sgwr-t/c/sec14.html
0247デフォルトの名無しさん2007/04/23(月) 19:53:03
>>246
演算子の優先順位とオペランドの評価順序は別物
0248デフォルトの名無しさん2007/04/23(月) 19:53:57
何もそんな怪しげなサイトから優先順位表を探してこなくても……
0249デフォルトの名無しさん2007/04/23(月) 19:57:05
>>247
質問者はオペランドの評価順は聞いていないと思うけど
質問の内容からも ( )、=、>、< の評価順位を聞いていると思うんだけど違うの? 
0250デフォルトの名無しさん2007/04/23(月) 19:59:57
いや、どう見ても評価順序の質問だと思うが・・・
0251デフォルトの名無しさん2007/04/23(月) 20:02:25
>>249
お前さん、評価順序と優先順位を混同してるんじゃない?
0252デフォルトの名無しさん2007/04/23(月) 20:06:40
>>250-251
ごめん funcAかfuncBかだったね
逝ってきます
■ このスレッドは過去ログ倉庫に格納されています