C の超カンタンなことなら漏れに聞け
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG他の言語はHTMLしかできないが、例のスレがウイルスに犯されているのをみかねて、立ち上がった。
変数宣言、入力、出力、演算、条件文、繰り返し文、関数、ファイル処理、ポインタ、構造体、と入門レベルなら一通りできる。
あと構造体のチェイン、関数のポインタ、ビットシフト、共用体がわからんが、これもあと一ヶ月くらい勉強すればわかるだろう。
このスレでは、漏れが基礎レベルの質問に答える。しかし、俺様が5分以上考え込む難問は禁止だ。
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG整数定数0 と、ビットパターン0は別じゃない?
NULL == 0 が必ず成立することを規格は保証しているけど、
NULL == *(void*) &memset_zero_area は保証あるの?
# 超カンタンな問題ではなくてゴメン
0155デフォルトの名無しさん
NGNG>NULL == 0 が必ず成立することを規格は保証しているけど
そうなの?
Cって実装依存じゃないの?
0156デフォルトの名無しさん
NGNGNULL = 0 ではない。
0157153
NGNG==は必ずしもビットパターンの一致を検査するわけじゃないからね。
ただし、共用体やポインタのキャストを使ってNULLを整数だってコンパイラだまして整数定数0と比較する式は0になることもあるよ。
0158デフォルトの名無しさん
NGNGmemset_zero_area ってのがなんなのか知らないからわかんない。
memset_zero_area ってなに? おせーて
0159デフォルトの名無しさん
NGNGmemset(memset_zero_area, 0, sizeof memset_zero_area);
ということだろう。
0160デフォルトの名無しさん
NGNGつーか NULL == *(void**) &memset_zero_area だな。
0161デフォルトの名無しさん
NGNG0162Kusakabe Youichi
NGNG> NULLポインターが
> 内部では『0』じゃない場合がある
> って聞いたんだけど
「NULLが0なんじゃなくって、0がNULLなんです」! (定型)
0163Kusakabe Youichi
NGNG> >154
> >NULL == 0 が必ず成立することを規格は保証しているけど
> そうなの?
> Cって実装依存じゃないの?
質問する前に規格書か文法書ぐらい読みましょう。
0164Kusakabe Youichi
NGNG> NULL==0 っていう式の値は1ってことは保証されてるよ。
> ==は必ずしもビットパターンの一致を検査するわけじゃないからね。
1行めはいいのですが、2行めは適切な教え方ではないですね。
0166162
NGNG古い「ANSIC言語大辞典」という本を読んだが
「NULL == 0 が必ず成立することを保証」
という意味には取れんのだが..
C++に関してはNULLポインタの定義がしっかりしているが。
0167デフォルトの名無しさん
NGNG0168BCC32.141516
NGNG0169デフォルトの名無しさん
NGNGオフセット14バイト目からビッグエンディアン2バイト
0170デフォルトの名無しさん
NGNGvoid* p; において
p = 0; と p = NULL; は C++ では等価だか、Cでは等価を保証しない
(p == 0) と (p == NULL) は C++ でも C でも等価、つーことでしょ
0171デフォルトの名無しさん
NGNGありがというございます。試してみます。
0172デフォルトの名無しさん
NGNG保証されるってば。保証されないのは、たとえsizeof(int) == sizeof(void *)
であっても*(int *)&p = 0 と p = 0が等価ではないということ。
なんかビットパターンが違うかもしれないということで混乱してるやつが
多いみたいだけど、sizeof(float) == sizeof(int)の場合(IA32はそうだね)に
float f = 1において*(int *)&f == 1 にはならなくてもf == (float)1になる
のと同じことだよ。
0173デフォルトの名無しさん
NGNGなんかこの話題年に2回くらい見てる気がする。
0174デフォルトの名無しさん
NGNG#define NULL "死ね"
0175166
NGNGの出典を教えてください。
保証しないと既存のプログラムが動かなくなる事はわかりますが。
0176Kusakabe Youichi
NGNG> 「NULL == 0 が必ず成立することを保証」
> の出典を教えてください。
っていうか文法書や規格書ぐらい読めば?
0177名無しさん@お腹いっぱい。
NGNGこんな所で粘着してないでさっさと仕事さがせよ!!
わかったか? わかったらちょっとコーヒー買って来い!陽一!!!
0178デフォルトの名無しさん
NGNG臭がりすぎ〜
0179(-_-;)うぅ
NGNGやることは標準入力から数字を受け取って3乗して表示するものです。
p()のところでc=cは何を入れてるんでしょうか・・
ボーランドのだとコンパイルエラーになりませんでした。
実行すると入力した数字が表示されるみたいっす。
int main(void)
{
int a;
int (*b)(int a);
b=q;
a=atoi(gets("うんこ"));
printf("3乗は %d です\n",(*b)(a));
return(0);
}
int q(int a)
{
int c;
c=p(a);
return(c);
}
int p(int a)
{
int c=c;
printf("できるのか?→%d\n",c);
return(a * a * a);
}
0180Kusakabe Youichi
NGNG> ボーランドのだとコンパイルエラーになりませんでした。
> int c=c;
うーむ、そこも何をやりたかったか意味不明ですけど、
gets("うんこ")
ここもエラーにならなかったのですね:)
q()を介してp()を呼んでいる意味もなさそうですし、
bという関数のポインターを使う必要もないですね。
0181179
NGNG0182デフォルトの名無しさん
NGNGc=c は、コンパイルエラーにならないとすると
正直何もしてないに等しい。
int c;
c=c;
と2行に分けて書いたのとほぼ等価行為なので
結局Cに何が入ってるかは神のみぞ知るってところ。
0183デフォルトの名無しさん
NGNG全てがスタックに取られたとしたら
スタックエリアはqが呼ばれた時に
00 qのc
- 04 qからmainのreturnアドレス
- 08 qのa
- 0C mainのb
- 10 mainのa
となるから変ですね。 たぶん mainのa も qのcもスタックではなく
レジスタに割り付けられて、そのレジスタが同じというのが真相でしょう。
確か -S かなんかで出せる筈のアセンブラ出力してみて下さい。
0184デフォルトの名無しさん
NGNGほんと、読解力ないね。
0185デフォルトの名無しさん
NGNG#undef NULL
#define NULL 1
int main( int, char** );
int main( int argc, char** args ) {
printf("Null is %d\n", NULL );
}
0186デフォルトの名無しさん
NGNG>> 「NULL == 0 が必ず成立することを保証」
>> の出典を教えてください。
>っていうか文法書や規格書ぐらい読めば?
だから、さっさと出典だせ。
0187デフォルトの名無しさん
NGNG#include <stdio.h>
int printf(const char *format, ...) { return 0; }
int main()
{
int c = 5;
printf("c = %d\n", c);
return 0;
}
何も表示されませんが、何か?
もちろん、標準ライブラリのprintf関数の動作は
規格で決まっていますが、何か?
0188デフォルトの名無しさん
NGNGおまえらpascalでもやれよ!
0189デフォルトの名無しさん
NGNG#define NULL 0
があるから、0になってるだけで。
#define NULL 1
にすれば、「NULL == 0」は保証されません。
0190デフォルトの名無しさん
NGNG・ソースに現れた「0」は「ヌルポインタ」に変換される。
・NULLの定義は「0」もしくは「(void *)0」である。
この程度じゃ駄目か?
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
0191デフォルトの名無しさん
NGNGだからてめーの言う通りなら、
標準ライブラリの動作は全て「保証されていません」になるんだよ、バーカ
0192デフォルトの名無しさん
NGNGISO/IEC 9899:1999
6.3.2.3
6.5.9
7.17
あたりかな。
ただし、NULLはstddef.hで定義されるマクロなので、明示的にも暗黙的にも
#includeしてない場合や、#undefして#defineした場合などは当然 NULL == 0
であるとは限らないけど、そんなプログラムはstrictly conforming program
じゃないから標準なんて気にするな。
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNG「定数0」と「ビット列としての0」の区別も
「NULL」と「ヌルポインタ」の区別もしてないと思われ
0196デフォルトの名無しさん
NGNG「勝手に書き換える」のは「未定義の動作をひきおこす」だけ。
0197箱の臭いがする
NGNG0198デフォルトの名無しさん
NGNG「int型はINT_MAXまでの値をとりえることが保証されている」
#undef INT_MAX
#define INT_MAX 1234567890123456789012345678901234567890
int i = INT_MAX;
printf("%d", i);
あれー?「保証されている」ってかいてあるのに、嘘じゃん。
0199デフォルトの名無しさん
NGNGNULL == 0であることは保証されている」ってことだな?
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNGお前の感じている感情は精神的疾患の一種だ
開放する方法は OS が知ってる OS に任せろ
0203デフォルトの名無しさん
NGNGint n[1][1][1][1][1];
こういう配列を作ってみたんですが、
実際のメモリ上ではどういう構造になっているのか全く分かりません。
int n[5] とも違うようだし、
sizeof の値も sizeof(n) == sizeof(int) だし、
どなたかご教授願えませんでしょうか。
0204Kusakabe Youichi
NGNG> int n[1][1][1][1][1];
> こういう配列を作ってみたんですが、
> 実際のメモリ上ではどういう構造になっているのか全く分かりません。
int×2×2×2×2×2でしょ?
> int n[5] とも違うようだし、
どこから5がでてくるのでしょう?
0205デフォルトの名無しさん
NGNG> > int n[1][1][1][1][1];
> > こういう配列を作ってみたんですが、
> > 実際のメモリ上ではどういう構造になっているのか全く分かりません。
> int×2×2×2×2×2でしょ?
( ゚Д゚)ハア?
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNG面白い。
>sizeof の値も sizeof(n) == sizeof(int) だし、
1x1x1x1x1で要素一つだから当然。
0208デフォルトの名無しさん
NGNGその多次元配列のメモリレイアウトのこと?
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNGサイズは1だから メモリは 単なるintの変数と同じ
0211Kusakabe Youichi
NGNGたしかに、×2->×1ですね。(^^;
> > sizeof の値も sizeof(n) == sizeof(int) だし、
> 1x1x1x1x1で要素一つだから当然
というかもとの発言のひとは、何を確認したかったのだろう?
0212210
NGNGn[x1][x2][x3][x4][x5] というように x1,x2,x3,x4,x5に 0以外を指定しても怒られない
0213Kusakabe Youichi
NGNG> 基本的に下から順番に固まりになってる絵を想像すれば問題ない
下ってどっちですか?
0214デフォルトの名無しさん
NGNGビルの窓から踏み出したら移動して逝く方向。
ご自身で確かめるよろし。
0215Kusakabe Youichi
NGNG> 配列指定は 最大じゃなくて サイズを示す
> サイズは1だから メモリは 単なるintの変数と同じ
そういえば、2ch.comp.programmerほうで、
「関数の引数に渡すときに&をつけるのがいやなので)」とかいう
だけの理由で、int a[1];みたいに書くとか言ってる人がいましたね:)
(それって、つまり代入や比較はその宣言したところではほとんどしなくて、
関数の引数に渡すばかりなんだろうか)
0216210
NGNG引数の宣言と 代入や比較とは?
0217Kusakabe Youichi
NGNG> n[x1][x2][x3][x4][x5] というように x1,x2,x3,x4,x5に 0以外を指定しても怒られない
負の数は? > 0以外
0218210
NGNGたいていの環境では叱られないだろう
0219Kusakabe Youichi
NGNG> ビルの窓から踏み出したら移動して逝く方向。
> ご自身で確かめるよろし。
添字の小さいほうがどっちになるの?
0220デフォルトの名無しさん
NGNGVC6.0でコンパイル。
警告、エラー
ともになし。
0221Kusakabe Youichi
NGNGint a[10]; と宣言しておいて、
a[20] = 0; と代入してもコンパイル時に警告だしてくれるコンパイラーは
あまりないっていう程度の意味では?
# でも「0以外」ってのがよくわからん。そっちに関しては宣言時の話?
0222デフォルトの名無しさん
NGNG移動して逝きついた先で添え字を調べてみろ。
0223210
NGNGint func(int a[1])
{ なんとかかんとか
}
みたいに参照代わりに配列を使うという話と読んだ。
がその話と後半 括弧内が繋がらない ので判らんと聞いた
0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNG間違いもあるさ。あんまり突っ込まないでやってくれ。
0227Kusakabe Youichi
NGNG> 間違ってオタオタ中ですか?
そういうことにしたいのですね:)
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNGどっちかというとこういうことじゃないか?
int func(int *);
int a[1];
func(a); /* &をつけない */
0230210
NGNGint func(int a[]); も一緒だし、そう書いた方がなんかいいと思えるよう
になったのは最近delphi漬だからかなあ
0231デフォルトの名無しさん
NGNG一番右の添え字。
配列のイメージってわかりますか?
0232203
NGNGn のひとつ分が多次元になるわけじゃなくて、
単なる n だったんですね。
勉強になりました。
0233デフォルトの名無しさん
NGNG「C言語ポインタ完全制覇」
をすすめる
0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNG次はジャパン言語を勉強してください。
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNGprintf("%d\n", n[0][0][0][0]);
0239デフォルトの名無しさん
NGNGメモリリークおめでとう
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGint i,j,k,l,m;
/* 初期化 */
for(i=0;i<1;i++){
for(j=0;j<1;j++){
for(k=0;k<1;k++){
for(l=0;l<1;l++){
for(m=0;m<1;l++){
n[i][j][k][l][m]=0;
}
}
}
}
}
0242デフォルトの名無しさん
NGNG>「C言語ポインタ完全制覇」
これ(・∀・)イイ!
この本の著者さん、今度はJava本出したんだよね。
0243デフォルトの名無しさん
NGNG0244242
NGNG完全制覇じゃないけど、謎と落とし穴と解明するらしいよ。
0245デフォルトの名無しさん
NGNG0246242
NGNGsage進行だったんだね…。
0247Kusakabe Youichi
NGNG> In article >>224, デフォルトの名無しさん/sage/224 wrote:
> > 間違ってオタオタ中ですか?
> そういうことにしたいのですね:)
ほんものだったら「ということに」では? :)
0248Kusakabe Youichi
NGNG> なんか必死だな。
ということにしたいわけですか? :)
# えさやりすぎか?:)
0249デフォルトの名無しさん
NGNGふーん、で? 何怒ってるの?
0250デフォルトの名無しさん
NGNG0251Kusakabe Youichi
NGNG> ふーん、で? 何怒ってるの?
おこってるっていうことにしてしまうと、何か安心するわけですね? :)
0252デフォルトの名無しさん
NGNG彼は質問してますね;)
■ このスレッドは過去ログ倉庫に格納されています