ポインタはどうやって学ぶべきか
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2007/10/24(水) 04:07:56先日のソフトウェア開発技術者試験午後�UのB木のポインタ表現
近年の基本情報技術者試験の午後C言語問題の自己参照構造体
など物凄く出来が悪いです。
ゆとり?文系?自作減少?
ブラックボックス化されてメモリ管理やコンピュータの細かい知識が不要となった?
本当にポインターは必要なのか!?議論しましょう
0002デフォルトの名無しさん
2007/10/24(水) 04:08:11http://pc11.2ch.net/test/read.cgi/tech/1171172537/
0003デフォルトの名無しさん
2007/10/24(水) 04:08:47やっぱり一番有名なのは、ポインタ完全制覇ですか?
ttp://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E5%AE%8C%E5%85%A8%E5%88%B6%E8%A6%87-%E6
%A8%99%E6%BA%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%82%BA%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA-%E5%89%8D%E6%A9%8B-%E5%92%8C%E5%BC%A5/dp/4774111422
こっちの本には自己参照構造体によるリストだとか木構造が無い
ttp://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%8C%E7%90%86%E8%A7%A3%E3%81%A7%E3%81
%8D%E3%81%AA%E3%81%84%E7%90%86%E7%94%B1-%E6%9C%9D%E4%BA%95-%E6%B7%B3/dp/4774114316
0004デフォルトの名無しさん
2007/10/24(水) 04:09:040005デフォルトの名無しさん
2007/10/24(水) 04:12:01関数のポインタ
文字列のポインタ
配列のポインタ
0006デフォルトの名無しさん
2007/10/24(水) 04:12:55/ / ̄ ̄ ̄ ̄ ̄ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|/ \ < 今、ポインタ殺してきた。リアルで。
/ ∠,,_ノ ソ _ ,,.. _) \__________________
/| '',,((ノ ) ノ (\) |
| |  ̄'  ̄ イ ハァ ハァ
\| υ 、_/ロロロ)_ ノ
/  ̄ ̄ \
/| υ \
( .| / ノ ̄ ̄ ̄) ノ \
ヽ.|◯ | ノ ̄ ̄ ̄) /\ ○\
/.| o .| ノ ̄ ̄ ̄) / \ o゚ \
0007デフォルトの名無しさん
2007/10/24(水) 04:14:15何がって、*がだよ。*ですよ*。もう形からしていやらしい。
しかも名前は逆参照演算子。普通とは逆に突っ込む。
意味はポインタ。挿すものだなんて…製作者は何を考えてるんだか。
*を付けた変数をファック。
とても18未満には教えていいような言語じゃないね!
0008デフォルトの名無しさん
2007/10/24(水) 04:15:500009デフォルトの名無しさん
2007/10/24(水) 06:11:15この先無理やり続けてもろくなことにはならないから
素直に公務員を目指したほうがいい。
0010デフォルトの名無しさん
2007/10/24(水) 07:18:49キショイ消えろ。
0011デフォルトの名無しさん
2007/10/24(水) 07:30:452:*を付けてみる
3:&を付けてみる
全部試して落ちないのが正解
0012デフォルトの名無しさん
2007/10/24(水) 07:41:510013デフォルトの名無しさん
2007/10/24(水) 07:54:11int* p;
どっちの書き方します?
0014デフォルトの名無しさん
2007/10/24(水) 07:58:270015デフォルトの名無しさん
2007/10/24(水) 08:14:55って書き方を考えると前者。
C++だと後者かな。
0016デフォルトの名無しさん
2007/10/24(水) 09:08:210017デフォルトの名無しさん
2007/10/24(水) 09:09:520018デフォルトの名無しさん
2007/10/24(水) 10:13:310019デフォルトの名無しさん
2007/10/24(水) 11:14:13「紙の上」でのみ理解してるんだろうね。
0020デフォルトの名無しさん
2007/10/24(水) 11:21:39やっぱイケてるC使いは実際にアセンブリ言語でメインメモリいじくっちゃったりしてたんスかね?
0021デフォルトの名無しさん
2007/10/24(水) 11:26:07単純に演算子がややこしいだけ
0022デフォルトの名無しさん
2007/10/24(水) 11:26:31やっていればそりゃあメモリのイメージを掴むのに有利かもしらんけど。
とにかくなんかメモリの塊があって、そこを指している矢印があって、
その矢印がポインタだというイメージでいいんじゃないの。
0023デフォルトの名無しさん
2007/10/24(水) 11:28:33ポインタ厨へ。ポインタは糞。イラネ。
http://pc11.2ch.net/test/read.cgi/prog/1140086684/
0024デフォルトの名無しさん
2007/10/24(水) 11:28:48いや、ワンボードしかなかった時代に、コンピュータをいじり始めたから、分かるだけなのだが...。
0025デフォルトの名無しさん
2007/10/24(水) 11:32:100026デフォルトの名無しさん
2007/10/24(水) 12:30:22どうやら大部分の人々はポインタを理解するための脳の一部分を持たずして生まれてくるようだ。
ポインタの理解はスキルではなく、才能の類である。
ポインタの理解にはインダイレクト且つ多重に関連付けを行う論理的思考が要求され、
どうあがいてもそれが出来ない人だっているのだ。
0027デフォルトの名無しさん
2007/10/24(水) 14:42:260028デフォルトの名無しさん
2007/10/24(水) 15:06:14例えばstrtol()みたいな関数も使えなかったわけですね?
0029デフォルトの名無しさん
2007/10/24(水) 15:56:49ポインタのポインタを使った処理を思い通りに(納得行くかたちで)組めるようになるのに10年てこと。
0030デフォルトの名無しさん
2007/10/24(水) 16:00:00Cでvramをレイプしてました
0031デフォルトの名無しさん
2007/10/24(水) 16:39:280032デフォルトの名無しさん
2007/10/24(水) 17:35:482次元配列の動的確保さえできないんだよな…
0033デフォルトの名無しさん
2007/10/24(水) 17:53:020034デフォルトの名無しさん
2007/10/24(水) 21:00:110035デフォルトの名無しさん
2007/10/24(水) 21:13:390036デフォルトの名無しさん
2007/10/24(水) 22:40:29ハンドアセンブルなら完璧。
0037デフォルトの名無しさん
2007/10/24(水) 22:53:520038デフォルトの名無しさん
2007/10/25(木) 12:09:520039デフォルトの名無しさん
2007/10/25(木) 12:10:49その面白さを若い奴らにどう伝えていくのか
技術の継承もおじさん世代の役目
0040デフォルトの名無しさん
2007/10/25(木) 13:23:34http://homepage3.nifty.com/mogami/diary/d0710.html#242
0041デフォルトの名無しさん
2007/10/25(木) 17:09:55http://pc11.2ch.net/test/read.cgi/prog/1140086684/
0042デフォルトの名無しさん
2007/10/25(木) 18:41:27http://pc8.2ch.net/test/read.cgi/tech/1115419223/
0043デフォルトの名無しさん
2007/10/25(木) 19:04:09逆にその違いが分かればポインタも分かる
0044デフォルトの名無しさん
2007/10/25(木) 19:08:18それは、ポインタという形にしてアドレスを意識しなくてもプログラミングできるようになったから
C以降にプログラマになった奴はアドレスを意識する必要性に迫られなかったからだ。
覚える必要がないから覚えなかった。だから理解できなかった。そういうことだ。
0045デフォルトの名無しさん
2007/10/25(木) 19:22:270046デフォルトの名無しさん
2007/10/25(木) 19:30:010047デフォルトの名無しさん
2007/10/25(木) 19:34:230048デフォルトの名無しさん
2007/10/25(木) 19:36:200049デフォルトの名無しさん
2007/10/25(木) 20:04:42ノードオブジェクトがほかのノードオブジェクトの参照を持つ、ではだめか?
>>48
オブジェクトがほかのオブジェクトをもって、そのオブジェクトがまたほかのオブジェクトを持つ、じゃだめか?
0050デフォルトの名無しさん
2007/10/25(木) 20:09:460051デフォルトの名無しさん
2007/10/25(木) 21:23:23ドミノが倒れるように全てを理解した
あの感動を体験したいならまずC言語からやるのだ
メモリやアドレスの定義もない、入門書からやるのだ
これは数学と似ている。
集合も論理学も教えない。だからクラスの誰も分からない
大学に入って初めて秘密を知るのだ。
まあ無駄なのでアセンブラからやれ
0052デフォルトの名無しさん
2007/10/25(木) 21:56:23CASL�Uでもいいですか?試験の為に本買ったんですが、Cの勉強(学校)が忙しくて放置したままです。
0053デフォルトの名無しさん
2007/10/25(木) 22:26:420054デフォルトの名無しさん
2007/10/26(金) 07:12:070055デフォルトの名無しさん
2007/10/26(金) 11:30:54まあ使うことのないだろうx86系のアセンブラで勉強するか、組み込みで使う可能性のある、ワンチップ
マイコンのアセンブラで勉強するか、どっちが実用性があるんだろうか?
0056デフォルトの名無しさん
2007/10/26(金) 13:00:090057デフォルトの名無しさん
2007/10/26(金) 13:25:33俺も。
一回参照設定したら変更できないのが参った。
ポインタの変り種だとおもったんだけど違うらしい。
0058デフォルトの名無しさん
2007/10/26(金) 17:16:59パソコン買えば漏れなく付いてくるx86系の方が実効性は高い
0059デフォルトの名無しさん
2007/10/26(金) 21:42:30C++の参照は、constなポインタ。
変数宣言時、関数の引数、コンストラクタの初期化リスト内でしか
値を初期化できないように制限してある。
ポインタには、大きなデータのコピーを避けるための"共有"の意味と
配列等で個々の位置を表すための"イテレータ"としての意味とがあるけれど、
後者は使い方を間違えると危険だから前者しかできなくなっているということ
0060デフォルトの名無しさん
2007/10/26(金) 21:57:09なんとなくポインタだと不自然だから参照で渡してる感じ
>>46
とあるメモリー上のデータの塊を、プログラマの都合で「違う解釈の仕方で読む」ことができるのが魅力
当然スピードを気にしなければJavaとかでもできるが、スピードの劣化が一切無くできるのがポインタの魅力
0061デフォルトの名無しさん
2007/10/27(土) 00:36:04要するに、int *p と int &pは無関係
int *const p と int &p
const int *const p と const int &p
が対応してる
0062デフォルトの名無しさん
2007/10/27(土) 00:42:030063デフォルトの名無しさん
2007/10/27(土) 10:36:58同じ*でも、型宣言と、中身を取り出すときの両方で使うから初心者にはややこしい・・・
0064デフォルトの名無しさん
2007/10/27(土) 12:10:18へーへー
俺もC++の参照よくわからんかったのでもっぱらポインタで代用してたけど
こういう意味だったのね
0065デフォルトの名無しさん
2007/10/27(土) 12:34:46> 参照は正直、std::stringやstd::listを渡すときくらいしか使わんな
> なんとなくポインタだと不自然だから参照で渡してる感じ
俺はむしろ逆だな。ポインタとしての機能を必要としない限り参照
(あるいは値)で渡す。安全第一だからね。
0066デフォルトの名無しさん
2007/10/27(土) 16:20:28大抵shared_ptr使っちゃうからなぁ
0067デフォルトの名無しさん
2007/10/27(土) 21:46:05boost は俺も結構使うけど、あまり必要無いときは使わない。
参照で OK なのにわざわざ boost 持ち込むとかはせん。
0068デフォルトの名無しさん
2007/10/28(日) 10:04:330069デフォルトの名無しさん
2007/10/28(日) 11:45:200070デフォルトの名無しさん
2007/10/28(日) 11:50:55http://www.gihyo.co.jp/books/syoseki.php/4-7741-1142-2
まだ買えるのかは知らない
0071デフォルトの名無しさん
2007/10/28(日) 14:19:450072デフォルトの名無しさん
2007/10/28(日) 16:10:450073デフォルトの名無しさん
2007/10/28(日) 16:16:43テンプレートメンバ関数ポインタを引数に取る関数のポインタの配列のポインタ
とかなると意味わからなくなるんだけどこれは理解できてないからだな
0074デフォルトの名無しさん
2007/10/28(日) 16:53:270075デフォルトの名無しさん
2007/10/28(日) 17:43:50C++ の参照渡しは、
int &p で宣言した関数に対して
呼び出し側では普通に int を渡すのが混乱した。
0076デフォルトの名無しさん
2007/10/28(日) 17:46:13普通に呼べるのは便利だが、混乱の元でもあるね。
0077デフォルトの名無しさん
2007/10/28(日) 17:58:23同じ記号を使うように決めたデザインがド間抜けに一票。
0078デフォルトの名無しさん
2007/10/28(日) 18:02:34実際に呼ぶとき*をつけると中身が出てくる謎仕様
宣言と間接参照演算子が同じってだけで、結局は慣れなんだけどね。
0079デフォルトの名無しさん
2007/10/28(日) 18:28:25int *p;
ってのは、「*pがint型」という意味でそのような仕様にしたらしい。
0080デフォルトの名無しさん
2007/10/28(日) 18:51:160081デフォルトの名無しさん
2007/10/29(月) 01:52:21アセンブラで登場する各種のアドレッシングモードを理解出来れば
ポインタなんてそれほど難しいもんじゃないよ。
0082デフォルトの名無しさん
2007/10/29(月) 18:48:110083デフォルトの名無しさん
2007/10/29(月) 19:36:22おお、なるほど。そう説明されればわかりやすいな
0084デフォルトの名無しさん
2007/10/29(月) 23:07:16配列のポインタを
混同または理解していない香具師が多い
0085デフォルトの名無しさん
2007/10/29(月) 23:49:550086デフォルトの名無しさん
2007/10/29(月) 23:53:24おまえのこと?
0087デフォルトの名無しさん
2007/10/30(火) 15:14:410088デフォルトの名無しさん
2007/10/30(火) 15:27:45int i = 0;
pointer p = new pointer(i);
pointer p2 = new pointer(p);
p.type → int
*p → 0
p2.type → pointer
*p2 → p
**p2 → 0
0089デフォルトの名無しさん
2007/10/30(火) 16:48:430090デフォルトの名無しさん
2007/10/30(火) 19:49:04そういう実装にすりゃいいじゃない。
0091デフォルトの名無しさん
2007/10/31(水) 06:55:330092デフォルトの名無しさん
2007/10/31(水) 09:29:33・ポインタのみでは実体が無いため、malloc()でそのアドレスを先頭とした実領域を確保する必要がある。
この2点だけ意識してれば十分使えると思うんだけど。何故理解出来ないのかが理解出来ない。
0093デフォルトの名無しさん
2007/10/31(水) 10:35:46ある「どこかに」はなく、箱の中をただよっているという
0094デフォルトの名無しさん
2007/10/31(水) 10:41:44「関数ポインタを引数にとる関数ポインタの多次元配列のポインタ渡し」とかパッと書けるもんなんでしょうか?
だとしたら俺は理解できてないな…
0095デフォルトの名無しさん
2007/10/31(水) 11:07:451+5-3+2*6+・・・
ポインタだって同じ
0096デフォルトの名無しさん
2007/10/31(水) 11:10:06でもポインタ演算の規則を明確に理解しようと思ったらタイプ理論とかの知識がいるんでしょ?
0097デフォルトの名無しさん
2007/10/31(水) 11:29:07ただしfor文を使用すること.
また,条件分岐(if文とswitch文)を使ってはならない.
課題3
かけ算の九九を以下の例のように表示するプログラムを作成せよ.
ただし,for文のネストを使用すること.
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
...
1 x 9 = 9
2 x 1 = 2
2 x 2 = 4
...
9 x 9 = 81
課題4
トランプのカード(ジョーカーを除く)を以下の例のようにすべて表示するプログラムを作成せよ.
ただし,for文のネストとswitch文を使用すること.
スペードの A
スペードの 2
スペードの 3
...
スペードの 10
スペードの J
スペードの Q
スペードの K
ダイヤの A
ダイヤの 2
ダイヤの 3
...
助けてくれ。。。
じゃヴぁで頼む。。。
0098デフォルトの名無しさん
2007/10/31(水) 11:32:50スレチ
0099デフォルトの名無しさん
2007/10/31(水) 11:48:160100デフォルトの名無しさん
2007/10/31(水) 11:52:440101デフォルトの名無しさん
2007/10/31(水) 12:08:50使う場合、通常の変数とずれがあるので混乱するが、以下の関係がある
*pointer = var;
pointer = &var;
*foo.pointer = *foo->pointer = foo.var = foo->var;
foo.pointer = foo->pointer = &foo.var = &foo->var;
どちらの形式をとっても、
アドレスと値のどちらにもアクセスできるようにしてあるという点が重要
(ただし、&var には代入できない・const void*とみなせる)
通常の変数は値を出し入れすることに主眼が置かれていて、
ポインタ変数はアドレスのほうを出し入れすることに主眼が置かれている
0102デフォルトの名無しさん
2007/10/31(水) 12:09:11全てを自分で管理するなら、そもそも高級言語は必要ないんじゃ?
0103デフォルトの名無しさん
2007/10/31(水) 12:14:30やっぱ、ポンタってむずいな、orz
0104デフォルトの名無しさん
2007/10/31(水) 12:24:040105デフォルトの名無しさん
2007/10/31(水) 19:02:3184が言いたいのは↓こういうことじゃね
#include <stdio.h>
int main()
{
short *p, **pp, *pa[9], (*ap)[9];
pp = &p;
printf("ポインタのポインタ: size:%d",sizeof(pp));
printf("\tstep:%d\n",(void *)(pp+1)-(void *)pp);
printf("ポインタの配列: size:%d",sizeof(pa));
printf("\tstep:%d\n",(void *)(pa+1)-(void *)pa);
printf("配列のポインタ: size:%d",sizeof(ap));
printf("\tstep:%d\n",(void *)(ap+1)-(void *)ap);
getchar();
return 0;
}
0106デフォルトの名無しさん
2007/10/31(水) 19:20:33#include <stdio.h>
int main()
{
short *p, **pp, *pa[9], (*ap)[9];
pp = &p;
printf("ポンタのポンタ: size:%d",sizeof(pp));
printf("\tstep:%d\n",(void *)(pp+1)-(void *)pp);
printf("ポンタの配列: size:%d",sizeof(pa));
printf("\tstep:%d\n",(void *)(pa+1)-(void *)pa);
printf("配列のポンタ: size:%d",sizeof(ap));
printf("\tstep:%d\n",(void *)(ap+1)-(void *)ap);
getchar();
return 0;
}
0107デフォルトの名無しさん
2007/10/31(水) 19:31:200108デフォルトの名無しさん
2007/10/31(水) 19:35:39typedef (*pfpf)(int (*)(int));
pfpf pfpfaa_tmp[9][9];
pfpf*** fuck;
fuck = &pfpfaa_tmp;
0109デフォルトの名無しさん
2007/10/31(水) 19:39:240110デフォルトの名無しさん
2007/10/31(水) 20:54:210111デフォルトの名無しさん
2007/10/31(水) 20:59:15それはポインタであり実体はそこにはないのである。
0112デフォルトの名無しさん
2007/10/31(水) 21:01:220113デフォルトの名無しさん
2007/10/31(水) 23:02:27これから技術者として生きていきたいと、もし君が思っているとしたら。
「〜〜だから、これは学ばなくていい。」という考え方は、
ひとまずやめたほうがいい。
まだ君は、どの情報が必要で、どの情報が必要でないと判断できないわけだから。
まずは、とにかくトコトン悩んでやってみることだよ。
自分の方向性を決めるのは、その後でも十分だと思う。
0114デフォルトの名無しさん
2007/11/02(金) 08:35:230115デフォルトの名無しさん
2007/11/02(金) 08:41:060116デフォルトの名無しさん
2007/11/02(金) 19:13:53↓を改善させるためにポインタのポインタを使わなきゃいけない理由は何故ですか?
void myalloc(char *p1, char *p2)
{
p1 = malloc(20);
strcpy(p1, "first string");
p2 = malloc(20);
strcpy(p2, "second string");
}
int main(void)
{
char *p1;
char *p2;
myalloc(p1,p2);
printf("p1=%s p2=%s\n", p1, p2);
return 0;
}
0117デフォルトの名無しさん
2007/11/02(金) 19:32:37ポインタがよくわかりません。教えてください><
0118デフォルトの名無しさん
2007/11/02(金) 19:36:16myalloc(char *p1, char *p2)のp1,p2とmainのp1,p2が別の人だから。
0119デフォルトの名無しさん
2007/11/02(金) 19:42:46値渡しではなく、参照渡し(アドレス渡し)にしているのにですか?
0120デフォルトの名無しさん
2007/11/02(金) 19:46:42どこが?
void myalloc(char *p1, char *p2)
はchar*の中身を渡しているだけで、
char*自身を渡してないよ。
0121デフォルトの名無しさん
2007/11/02(金) 20:00:53int main(void)
{
char *p1
この段階ではp1には不定な値が入っている。例えば0xfefefefeだとしておこう
void myalloc(char *p1, char *p2)
{
これが呼ばれた段階で p1 == 0xfefefefe
p1 = malloc(20);
この段階で p1 には何かしらのアドレスが入る。例えば0x00001000 としよう
myallocを抜ける段階でp1という変数は消えてなくなる。
なぜならp1はローカル変数だからだ
結局のところ、myallocのp1は、mainのp1が保持していた 0xfefefefeという値とコピーしたローカル変数に過ぎない
そのローカル変数にmallocの返り値を保存しても、mainのp1には何の影響もないわけだ
0122デフォルトの名無しさん
2007/11/02(金) 20:01:560xfefefefeという値「を」コピーしたローカル変数に過ぎない
だった。意味が通じなくなりそうだから念のため修正
0123デフォルトの名無しさん
2007/11/02(金) 20:07:56void myalloc(char p1, char p2)
で考えてみよう。
main(){
char p1='a'
char p2='b';
myalloc(p1,p2)
}
こうした時myalloc(p1,p2) にやってくるのは'a','b'という値。
なのでmyalloc(p1,p2)の中でp1,p2を変更してもmainの中のp1,p2は変化しない。
あとは*をつけるだけ。
void myalloc(char *p1, char *p2)
main(){
char* p1="a";
char* p2="b";
myalloc(p1,p2)
}
0124デフォルトの名無しさん
2007/11/02(金) 20:09:33つまり・・・
0125デフォルトの名無しさん
2007/11/02(金) 20:11:15mainのp1自身のアドレスを渡しているわけではないんですね
0126デフォルトの名無しさん
2007/11/02(金) 20:13:20そうです。結構はまるポイントですね。これ。
0127デフォルトの名無しさん
2007/11/02(金) 20:17:40↓改善したプログラムですが・・・*p1と*p2もローカル変数だから消えちゃって・・・
void myalloc(char **p1, char **p2)
{
p1 = malloc(20);
strcpy(*p1, "first string");
p2 = malloc(20);
strcpy(*p2, "second string");
}
int main(void)
{
char *p1;
char *p2;
myalloc(&p1,&p2);
printf("p1=%s p2=%s\n", p1, p2);
return 0;
}
0128デフォルトの名無しさん
2007/11/02(金) 20:20:22↓改善したプログラムです
void myalloc(char **p1, char **p2)
{
*p1 = malloc(20);
strcpy(*p1, "first string");
*p2 = malloc(20);
strcpy(*p2, "second string");
}
int main(void)
{
char *p1;
char *p2;
myalloc(&p1,&p2);
printf("p1=%s p2=%s\n", p1, p2);
return 0;
}
0130デフォルトの名無しさん
2007/11/02(金) 20:23:27実に惜しい
つーか怖いwww
void myalloc(char **p1, char **p2)の中のp1はmainのp1をポインタに持つポインタなので・・・
mainのp1のポインタに対してmallocするには・・・
ていう。
0131デフォルトの名無しさん
2007/11/02(金) 20:25:26あと名前の設定をミスってるのが大きい。
char*のやつは文字列型っぽい名前にしなくちゃいけないし、
引数のほうは文字列型のアドレスっぽい名前にしなくちゃ。
0132デフォルトの名無しさん
2007/11/02(金) 20:27:500133デフォルトの名無しさん
2007/11/02(金) 20:28:39一回名前かえよう
void myalloc(char **pp1, char **pp2)
{
}
int main(void)
{
char *p1;
char *p2;
}
とすると、pp1はp1を値に持っている。なので*pp1=p1
*pp1をいじると当然p1も変わる。
0134デフォルトの名無しさん
2007/11/02(金) 20:29:310135デフォルトの名無しさん
2007/11/02(金) 20:30:38『pp1は&p1を値に持っている』じゃなくて>『pp1はp1を値に持っている』ですか?
0136デフォルトの名無しさん
2007/11/02(金) 20:40:12サーセン『pp1は&p1を値に持っている』です。
0137デフォルトの名無しさん
2007/11/02(金) 20:40:230138デフォルトの名無しさん
2007/11/02(金) 20:40:490139デフォルトの名無しさん
2007/11/02(金) 20:46:440140デフォルトの名無しさん
2007/11/02(金) 20:58:48いちいち頭で考えて使っているんですか?
それとも体が勝手に動くものなんですか?
0141デフォルトの名無しさん
2007/11/02(金) 21:02:40まともな命名法と*の読み方しだいで何とかなる範囲じゃね?
0142デフォルトの名無しさん
2007/11/02(金) 21:06:310143デフォルトの名無しさん
2007/11/02(金) 21:18:290144デフォルトの名無しさん
2007/11/02(金) 21:21:23>>127がコピペ失敗って意味じゃなくて>>127がバグだったって意味ね
0145デフォルトの名無しさん
2007/11/02(金) 22:00:460146デフォルトの名無しさん
2007/11/02(金) 22:21:470147デフォルトの名無しさん
2007/11/02(金) 22:26:520148デフォルトの名無しさん
2007/11/02(金) 22:45:470149デフォルトの名無しさん
2007/11/02(金) 22:52:160150デフォルトの名無しさん
2007/11/02(金) 22:59:47参照はダブルポインタ。
0151デフォルトの名無しさん
2007/11/03(土) 04:42:120152デフォルトの名無しさん
2007/11/03(土) 11:51:23なんて呼び方はやめて普通に
「ポインタへのポインタ」
って呼べばいい
という主張をどこかで見たな
0153デフォルトの名無しさん
2007/11/03(土) 12:36:520154デフォルトの名無しさん
2007/11/03(土) 12:47:290155デフォルトの名無しさん
2007/11/03(土) 14:01:21「配列へのポインタ」と「ポインタへのポインタ」の
どっちの話をしているのかが決まらないまま話が進むこと
↓
だから素人同士の会話でしか使われない表現ということ
0156デフォルトの名無しさん
2007/11/03(土) 14:01:350157デフォルトの名無しさん
2007/11/03(土) 14:03:22× 問題は「ダブルポインタ」と言ってしまうと
○ 問題は「char **p;」の表記だけを見て「ダブルポインタ」と言ってしまうと
0158デフォルトの名無しさん
2007/11/03(土) 14:09:53ちょっと暇つぶししてみた
ダブルポインタ に一致する日本語のページ 約 3,040 件
ポインタのポインタ に一致する日本語のページ 約 9,800 件
配列のポインタ に一致する日本語のページ 約 672 件
ポインタへのポインタ に一致する日本語のページ 約 616 件
配列へのポインタ に一致する日本語のページ 約 14,800 件
最近はブログのせいでごみばっかり引っかかるようになってしまった
と言っても以前はマニュアルのコピーばっかり引っかかってた訳だが
0159デフォルトの名無しさん
2007/11/03(土) 14:13:28http://pc11.2ch.net/test/read.cgi/tech/1171172537/49-
0160デフォルトの名無しさん
2007/11/03(土) 14:15:27(T* *a)にしたら少し理解しやすくなったかもしれないこともなかったような気がした
0161デフォルトの名無しさん
2007/11/03(土) 14:19:180162デフォルトの名無しさん
2007/11/03(土) 14:20:59char *p;
p = str;
0163デフォルトの名無しさん
2007/11/03(土) 14:21:07だれが流行らせたんだ?メジャーな入門本に書いてあるのか?
0164デフォルトの名無しさん
2007/11/03(土) 14:22:54int *p; イントポインタ
double *q; ダブルポインタ
これをだれかが間違って解釈して
馬鹿の間で蔓延したと思われ
0165デフォルトの名無しさん
2007/11/03(土) 14:24:540166デフォルトの名無しさん
2007/11/03(土) 14:28:21それ見てダブルポインタなんてアホな呼び方してるのは
日本人だけだろうと思って調べてみたが
毛唐の間でも普通に使われてるのな
double *p;
int **p;
両方の意味でw
0167デフォルトの名無しさん
2007/11/03(土) 14:30:24char **p;
と書いて配列へのポインタと解釈することなんてありえるか?
配列へのポインタといったら
char (*p)[N];
じゃないのか?
0168デフォルトの名無しさん
2007/11/03(土) 14:31:55int main(int argc, char **argv)
0169デフォルトの名無しさん
2007/11/03(土) 14:32:28MITで今じゃ完全に定着しているって後輩が言ってた。
0170デフォルトの名無しさん
2007/11/03(土) 14:32:48それはポインタの配列
0171デフォルトの名無しさん
2007/11/03(土) 14:37:230172デフォルトの名無しさん
2007/11/03(土) 14:45:370173デフォルトの名無しさん
2007/11/03(土) 14:48:52ポインタの配列とダブルポインタの区別はしなくても平気ですか?
0174デフォルトの名無しさん
2007/11/03(土) 14:48:53C言語は得意だけど日本語が苦手なだけだよ
0175デフォルトの名無しさん
2007/11/03(土) 15:16:470176デフォルトの名無しさん
2007/11/03(土) 15:18:280177デフォルトの名無しさん
2007/11/03(土) 15:27:470178デフォルトの名無しさん
2007/11/03(土) 16:10:380179デフォルトの名無しさん
2007/11/03(土) 16:23:17ポインタへのポインタばっかり
0180デフォルトの名無しさん
2007/11/03(土) 16:40:330181デフォルトの名無しさん
2007/11/03(土) 16:48:30案の定、ポインタを理解していなかった。
0182デフォルトの名無しさん
2007/11/03(土) 17:52:530183デフォルトの名無しさん
2007/11/03(土) 17:53:310184デフォルトの名無しさん
2007/11/03(土) 23:55:270185デフォルトの名無しさん
2007/11/04(日) 00:00:190186デフォルトの名無しさん
2007/11/04(日) 01:59:00ただそういうときには typedef するか struct になってることの方が多い
0187デフォルトの名無しさん
2007/11/04(日) 06:03:01使い道が想像できん。
0188デフォルトの名無しさん
2007/11/04(日) 10:44:18行列の配列とか?
0189デフォルトの名無しさん
2007/11/04(日) 12:25:140190デフォルトの名無しさん
2007/11/04(日) 13:17:16どうすればいいか分からなかった漏れが来ましたよ
0191デフォルトの名無しさん
2007/11/04(日) 13:32:290192デフォルトの名無しさん
2007/11/04(日) 13:34:02いやそれ文字列になってないw
0193デフォルトの名無しさん
2007/11/04(日) 13:35:080194デフォルトの名無しさん
2007/11/04(日) 13:50:070195デフォルトの名無しさん
2007/11/04(日) 13:51:26/(^o^)\
0196デフォルトの名無しさん
2007/11/04(日) 16:13:340197デフォルトの名無しさん
2007/11/04(日) 16:38:220198デフォルトの名無しさん
2007/11/04(日) 20:31:420199デフォルトの名無しさん
2007/11/04(日) 20:32:500200デフォルトの名無しさん
2007/11/04(日) 20:34:060201デフォルトの名無しさん
2007/11/04(日) 20:40:22string Array[32][16];
/* 200 get */
0202デフォルトの名無しさん
2007/11/04(日) 23:16:190203デフォルトの名無しさん
2007/11/05(月) 00:40:490204デフォルトの名無しさん
2007/11/05(月) 01:07:41それでも、わからなければ・・・・
私は知らん。
0205デフォルトの名無しさん
2007/11/05(月) 01:29:37あれはいいものだ・・・
0206デフォルトの名無しさん
2007/11/05(月) 07:48:59変数に成り代われるのは演算子のおかげであって、ポインタ自体はアドレスを指すことしか出来ないんだから。
0207デフォルトの名無しさん
2007/11/05(月) 12:15:17演算子の扱いとか、関数の引数や戻り値としての扱いとか、直観に反する振る舞いをするのでつまづく。
0208デフォルトの名無しさん
2007/11/05(月) 14:27:350209デフォルトの名無しさん
2007/11/05(月) 15:33:150210デフォルトの名無しさん
2007/11/05(月) 19:02:30変数と知れず変数を指し示す物と考えると理解が難しいのかもしれません
int a;
int *p;
p = &a;
*p = 10;
printf("%d",a);
結果:
10
普通はやりませんが以下の様に正数型をポインタとしても使えます
int a;
unsigned int p;
p = (unsigned int)&a;
*(int*)p = 10;
printf("%d",a);
結果:
10
このようにキャストをしっかりしてやれば代用が利いたりします
でも、64ビットOSだとこれは変更が要りますが64ビットOSはポインタのサイズが32ビットが64ビットの正数型になるだけなので64ビット長の正数型を用意するだけで良いだけのことですけどね
0211デフォルトの名無しさん
2007/11/05(月) 19:33:550212デフォルトの名無しさん
2007/11/05(月) 19:43:46そもそも正数っていうのは0より大きい実数のことであって、
unsigned intっていうのは0以上の整数のことであるわけだが。
0213デフォルトの名無しさん
2007/11/05(月) 19:48:18それ自然数
0214デフォルトの名無しさん
2007/11/05(月) 19:49:06まあいいや。
0215デフォルトの名無しさん
2007/11/05(月) 20:07:260216デフォルトの名無しさん
2007/11/05(月) 20:56:270217デフォルトの名無しさん
2007/11/05(月) 21:15:37知らなかったよ
0218デフォルトの名無しさん
2007/11/05(月) 21:24:330219デフォルトの名無しさん
2007/11/05(月) 21:55:12なんでそれをやったかは忘れた
0220デフォルトの名無しさん
2007/11/05(月) 22:11:37こんなあたりだろ
0221デフォルトの名無しさん
2007/11/06(火) 00:14:25int* pointa[10];
0222デフォルトの名無しさん
2007/11/06(火) 00:16:260223デフォルトの名無しさん
2007/11/06(火) 00:39:02気にしては駄目だw
0224デフォルトの名無しさん
2007/11/06(火) 00:52:22int* ponta[10];
int配列へのポインタ
int(* ponta)[10];
でいいんですよね?
0225デフォルトの名無しさん
2007/11/06(火) 00:55:410226デフォルトの名無しさん
2007/11/06(火) 00:58:13なんで?最近の言語はコンパイル時に勝手に最適化してくれるんじゃないの?
WEB系ではいらない?
汎用系では?
制御・ファーム・ハード系では?
ソフト系では?
0227デフォルトの名無しさん
2007/11/06(火) 00:59:500228デフォルトの名無しさん
2007/11/06(火) 01:06:170229デフォルトの名無しさん
2007/11/06(火) 01:08:29たしか、それでおkなはず
0230デフォルトの名無しさん
2007/11/06(火) 02:56:11double *p;
p = (double *)&a;
*(int*)p = 10;
printf("%d",a);
結果:
10
0231デフォルトの名無しさん
2007/11/06(火) 03:39:010232デフォルトの名無しさん
2007/11/06(火) 08:32:43それは流石に駄目だろう
多分、出来なくはないだろうけど浮動小数点数の演算が適応されないポインタに対してこれはナンセンス過ぎないか?
0233デフォルトの名無しさん
2007/11/06(火) 11:10:25double p;
p = (double)&a;
*(int*)p = 10;
printf("%d",a);
結果:
>>232
これと勘違いしてない?
0234デフォルトの名無しさん
2007/11/06(火) 11:42:39色々怖いな。
0236デフォルトの名無しさん
2007/11/06(火) 14:59:59まあこれを満たさない処理系なんてあるのか知らないけど
0237デフォルトの名無しさん
2007/11/06(火) 15:17:15いろいろわかってなさ杉
0238デフォルトの名無しさん
2007/11/06(火) 15:29:44>>233
のコードが実行できると
どっかのメモリに10が代入されるってことなのか?
0240デフォルトの名無しさん
2007/11/06(火) 15:34:210241デフォルトの名無しさん
2007/11/06(火) 15:37:47ポインタはint型のサイズと同じって記憶があるけど。
0242デフォルトの名無しさん
2007/11/06(火) 15:37:55ポインタのサイズが型によって違う処理系教えてくれ
0243デフォルトの名無しさん
2007/11/06(火) 15:47:56doubleにintポインタのアドレスを入れるけど、
doubleの値をintポインタにキャストしてるから、
結局int aに値を入れてるのと同じ。
0244デフォルトの名無しさん
2007/11/06(火) 15:48:44語弊があるな、intのアドレスをdoubleの値に入れる。かな
0245デフォルトの名無しさん
2007/11/06(火) 15:55:40なるほどね、読み返して見たら納得できた。
0246236
2007/11/06(火) 16:24:31しかし、void*とかmallocとか考えるとありえないなorz
スレ汚しすまんかった
0247デフォルトの名無しさん
2007/11/06(火) 16:48:26それはない
0248デフォルトの名無しさん
2007/11/06(火) 16:59:09そういう場合もある
0249デフォルトの名無しさん
2007/11/06(火) 18:25:36規格上はint *とdouble *が安全に変換できるとは限らない
void *を介しても同じ事
0250デフォルトの名無しさん
2007/11/06(火) 18:37:140251デフォルトの名無しさん
2007/11/06(火) 19:33:07C#とかポインタを気にせずプログラミングできる言語が主流になりゃいい。
今後PCはどんどん高性能化していって統合環境が整うんだからポインタみたいな
危険な構造、なくしてけばいいよ。
そういうのはコンパイラに任せとけ。
0252デフォルトの名無しさん
2007/11/06(火) 21:20:12こういうマイコンは限られたメモリをいかに容量的に効率的に高速に使うかが大事
0253デフォルトの名無しさん
2007/11/06(火) 21:24:25ただ現実にはそういう方向かもね。携帯とか Java 走ってる。
あと、C 使いこなすにはポインタ理解する必要はあるけど、
必要以上にポインタを使い回す事はない。パフォーマンスが
心配なら実際 profiling してから直すべき。
ついでに、あまり複雑なことをしなけりゃポインタも簡単。
0254デフォルトの名無しさん
2007/11/06(火) 22:10:34配列そのものと、何番目かをあらわすIndexと。二つ渡すのが非常にかっこわるい
0255デフォルトの名無しさん
2007/11/06(火) 22:13:040256デフォルトの名無しさん
2007/11/06(火) 22:36:260257デフォルトの名無しさん
2007/11/07(水) 06:26:59C#、Javaはむしろポインタだらけじゃないか?
0258デフォルトの名無しさん
2007/11/07(水) 06:56:56>doubleにintポインタのアドレスを入れるけど、
>doubleの値をintポインタにキャストしてるから、
>結局int aに値を入れてるのと同じ。
double*に入れるときは問題ないけど
doubleに入れるときはアドレス値がdouble値としてふさわしくないときに
正規化されて他の正しい浮動小数点数に変換されるだろうから
int*にキャストしたときには別の場所を指してる可能性があるね
0259デフォルトの名無しさん
2007/11/07(水) 07:39:190260デフォルトの名無しさん
2007/11/07(水) 08:32:42確かにその通り。正規化云々以前にポインタ値をdouble変数に入れられない。
0261デフォルトの名無しさん
2007/11/07(水) 08:39:01数値としては別な物になるだろうけど。
0262デフォルトの名無しさん
2007/11/07(水) 10:38:38つ[規格]
0263デフォルトの名無しさん
2007/11/07(水) 11:06:580264デフォルトの名無しさん
2007/11/07(水) 14:24:27longに入れたりintに入れたりは幅だけ合ってれば出来るけど
doubleの場合は規格化された値しか入れられないよ
0265デフォルトの名無しさん
2007/11/07(水) 14:27:32union {
double d;
int *p;
} hoge;
hoge.p = (int *)-1;
printf("%f", hoge.d);
これやってみ
0266デフォルトの名無しさん
2007/11/07(水) 19:32:13無理に1000いくまで議論しなくてもいいと思うんだ・・・
0267デフォルトの名無しさん
2007/11/07(水) 21:15:55int func(int a) {
return a*2;
}
main(){
int (*p_func)(int);
p_func = func;
(*p_func)(2); //実行方法
}
0268デフォルトの名無しさん
2007/11/07(水) 21:25:140269デフォルトの名無しさん
2007/11/07(水) 21:25:290270デフォルトの名無しさん
2007/11/07(水) 22:42:55void (*p_funcs[])(void) = {funca, funcb};
0271デフォルトの名無しさん
2007/11/07(水) 22:43:34int* ponta[10];
int配列へのポインタ
int(* ponta)[10];
0272デフォルトの名無しさん
2007/11/07(水) 22:45:56void *func(void);
0273デフォルトの名無しさん
2007/11/07(水) 22:51:540274デフォルトの名無しさん
2007/11/07(水) 22:55:31int *ponta[10];
0275デフォルトの名無しさん
2007/11/07(水) 23:49:29#include <stdio.h>
typedef int (*pKANSUU)(int);
int pontax0(int ponta){
return ponta-ponta;
}
int pontax1( int ponta ){
return ponta;
}
int pontax2(int ponta ){
return 2*ponta;
}
int main(){
pKANSUU ponta[3]; //int (*ponta[3])(int);
ponta[0] = &pontax0;
ponta[1] = &pontax1;
ponta[2] = &pontax2;
printf("x0: %d, x1: %d, x2: %d\n", (ponta[0])(100), (ponta[1])(100), ponta[2](100) );
return 0;
}
0276デフォルトの名無しさん
2007/11/07(水) 23:55:360277デフォルトの名無しさん
2007/11/08(木) 00:00:130278デフォルトの名無しさん
2007/11/08(木) 00:05:540279デフォルトの名無しさん
2007/11/08(木) 00:06:440280デフォルトの名無しさん
2007/11/08(木) 00:14:16つ kannsuuhairetsu[] = {kannsuu0, kannsuu1, kannsuu2,......};
0281デフォルトの名無しさん
2007/11/08(木) 00:27:05もともとはどっちが正しいの?
0282デフォルトの名無しさん
2007/11/08(木) 01:06:42世間に受け入れられたなんて話を聞いたことがある。
0283デフォルトの名無しさん
2007/11/08(木) 01:17:090284デフォルトの名無しさん
2007/11/08(木) 06:10:440285デフォルトの名無しさん
2007/11/08(木) 06:50:19void *func(void);
0286デフォルトの名無しさん
2007/11/08(木) 06:52:01void func(void);
で宣言していいんですか?引数が不貞の突起も?
0287デフォルトの名無しさん
2007/11/08(木) 07:05:560288デフォルトの名無しさん
2007/11/08(木) 07:49:01なにやら面妖な……
関数の戻り値型は一致しないといけません。まぁ、呼び出し側で値を使わないなら何でも構いませんが。
引き数に関しては、プロトタイプ宣言するなら一致している必要が出てくるのでなしと宣言したらなしになるので、
宣言したくないならなし(void)書いてはいけません。
0289デフォルトの名無しさん
2007/11/08(木) 17:33:36void swap_ptr(char **a, char **b)
{
char *temp;
temp = *a;
*a = *b;
*b = temp;
}
int main(void)
{
char *str_a = "ABC";
char *str_b = "123";
swap_ptr(&str_a, &str_b);
printf("str_a=%s str_b=%s\n", str_a, str_b);
return 0;
}
↑のは正常に文字列の入れ替えが出来ます。
ならば
void swap_ptr(char **a, char **b)
{
char *temp;
*temp = **a;
**a = **b;
**b = *temp;
}
にしたら先頭の一文字だけ交換されるのか・・・と思ったら、交換されない上Warningまで出ます。
何がおかしいのでしょうか?
0290デフォルトの名無しさん
2007/11/08(木) 17:35:09void swap_ptr(char **a, char **b)
{
char *temp;
&temp = a;
a = b;
b = &temp;
}
にしたらコンパイルすらできません。この場合はaとbのスタック変数のメモリアドレスそのものを(物理的に)交換しようとしているからなのでしょうか?
0291デフォルトの名無しさん
2007/11/08(木) 17:39:22>『問題が発生したため、a.exe を終了します。 ご不便をおかけして申し訳ありません。』
という致命的なエラーで落ちます。
0292デフォルトの名無しさん
2007/11/08(木) 17:41:14void swap_ptr(char ** a, char ** b) {char temp = ** a; ** a = ** b; ** b = temp;}
でないと辻褄が合わない。
そもそもchar * temp; だけではポインタは初期化されていないので、* temp = ...; とした場合不正アクセスになる。
0293デフォルトの名無しさん
2007/11/08(木) 17:41:180294デフォルトの名無しさん
2007/11/08(木) 17:42:520295デフォルトの名無しさん
2007/11/08(木) 17:54:38printf("%c\n",**a);
0296デフォルトの名無しさん
2007/11/08(木) 18:03:220297デフォルトの名無しさん
2007/11/08(木) 18:10:38char **a;
&a: ?
a: ?
*a: a配列全体を指すアドレス
**a: aの実体(1文字)
ローカル変数のスタックはどこにいった
0298デフォルトの名無しさん
2007/11/08(木) 18:13:38a: 文字列のアドレス
*a: 文字列(文字配列へのポインタ)
**a: 先頭文字
0299デフォルトの名無しさん
2007/11/08(木) 18:14:52その通りにやってもエラで落ちます・・
0300デフォルトの名無しさん
2007/11/08(木) 18:16:03*a: 文字列(文字へのポインタ)
0301デフォルトの名無しさん
2007/11/08(木) 18:19:16a: aの指すアドレス
*a: aの指すアドレスの中身(文字配列全体)を指すアドレス?
**a: aの指すアドレスの・・・?
0302デフォルトの名無しさん
2007/11/08(木) 18:31:24これでなんでエラーが出るんでしょう。
#include <stdio.h>
void swap_ptr(char **a, char **b)
{
char temp;
temp = **a;
**a = **b;
**b = temp;
}
int main(void)
{
char *str_a = "ABC";
char *str_b = "123";
swap_ptr(&str_a, &str_b);
printf("str_a=%s str_b=%s\n", str_a, str_b);
return 0;
}
予想される結果:str_a=1BC str_b=A23
現実:コンパイルは通るけど実行後何も表示されずに即エラー落ち
0303デフォルトの名無しさん
2007/11/08(木) 18:36:23>292を使うには、main()でchar str_a[] = "ABC"などとしないといけない。
0304デフォルトの名無しさん
2007/11/08(木) 18:38:190305デフォルトの名無しさん
2007/11/08(木) 18:51:37char str_a[] = "ABC"; (引数&str_a)もしくは
char **str_a = "ABC";(引数str_a)で宣言すると
無事に"文字列"全体が交換されたんですけど、先頭文字だけでは無いんですね。何故か
0306デフォルトの名無しさん
2007/11/08(木) 18:53:480307デフォルトの名無しさん
2007/11/08(木) 19:56:18ヘンタイじみたモノは使うのを辞めましょう
0308デフォルトの名無しさん
2007/11/08(木) 20:16:360309デフォルトの名無しさん
2007/11/08(木) 23:51:48どうでも良いけど、警告でねーか?
引数とわたす値の型が違ってるんだし
全体が交換されたからといって
こんな間違ったポインタの使い方
なんの役にもたたねぇぞ
0310デフォルトの名無しさん
2007/11/09(金) 00:27:30{
(*************printf)("hello\n");
}
これがコンパイルできるのはなぜですか?
気になって夜もろくに眠れません。
誰か教えて!!
0311デフォルトの名無しさん
2007/11/09(金) 00:31:100312デフォルトの名無しさん
2007/11/09(金) 03:30:410313デフォルトの名無しさん
2007/11/09(金) 22:13:25{
(*************************************************************************************************************************************************************************printf)("hello\n");
}
これも出来たから大丈夫
0314デフォルトの名無しさん
2007/11/09(金) 22:16:57http://local.joelonsoftware.com/mediawiki/index.php/Java%E3%82%B9%E3%82%AF%E3%83%BC%E3%83%AB%E3%81%AE%E5%8D%B1%E9%99%BA
あなたが再帰アルゴリズムを数秒で書け、連結リストを操作するポインタを使った関数をホワイトボードに書くのと同じくらい早く実装できる大学3年生なら、私たちのニューヨークでのサマーインターンプログラムをチェックしてほしい! 申し込みの締め切りは2月1日だ。
0315デフォルトの名無しさん
2007/11/09(金) 23:25:03int main(void) {
1;
return 0;
}
0316デフォルトの名無しさん
2007/11/10(土) 00:39:09('A')
}
0317デフォルトの名無しさん
2007/11/10(土) 01:41:07char *s1, *s2;
while (*(unsigned long long *)s2 = *(unsigned long long *)s1);
この超ドSなコピーとかやってみ?ほんとハラハラさせてくれるよね
0318デフォルトの名無しさん
2007/11/10(土) 01:45:28ついポインタに目がいってしまいました
0319デフォルトの名無しさん
2007/11/10(土) 01:52:25('A')マンドクセ
}
0320デフォルトの名無しさん
2007/11/10(土) 02:02:520321デフォルトの名無しさん
2007/11/10(土) 02:21:33あたりの自己参照構造体が難しいのですが・・・どうすりゃいいんだ〜〜〜〜
0322デフォルトの名無しさん
2007/11/10(土) 02:28:14{
struct Node *pNext;
void *ptr;
};
自己参照構造体ってこんなんだっけ?
0323デフォルトの名無しさん
2007/11/10(土) 02:31:10自己参照構造体が苦手でよくソフ開受かったな俺
typedef struct _person {
int number;
char name[40];
struct _person *prev;
struct _person *next;
} person;
main() {
prson *p;
}
0324デフォルトの名無しさん
2007/11/10(土) 02:34:46「struct _person」を「person」という省略名で宣言したいが、
メンバの定義段階では、「struct _person」は定義済みだが未だ「person」は定義されていないため
「struct _person」というダミーの名前を使わないとコンパイルエラーになるからって奴。
0325デフォルトの名無しさん
2007/11/10(土) 02:42:48C言語は今でも
struct _person {
int number;
char name[40];
struct _person *prev;
struct _person *next;
} ;
main() {
_person *p;
}
こういう書き方はだめなんだっけ?
0326デフォルトの名無しさん
2007/11/10(土) 02:48:13だめ
そいつはC++でしかできない
0327デフォルトの名無しさん
2007/11/10(土) 02:57:55そうなんか�d
最近「C言語で開発」とか言われても、開発環境がC++だから
どこまでがCの仕様なのかわからなくなることがある
0328デフォルトの名無しさん
2007/11/10(土) 02:59:49その機能がCのものなのかC++のものなのかも理解して
いないような香具師らもウジャウジャいるから気をつけろ。
0329デフォルトの名無しさん
2007/11/10(土) 03:18:38え??いいんじゃないの?
0330デフォルトの名無しさん
2007/11/10(土) 03:20:31俺の事だ/(^o^)\
0331デフォルトの名無しさん
2007/11/10(土) 03:20:49あ、今試したらだめだった
なんでダメなんだっけ?
0332デフォルトの名無しさん
2007/11/10(土) 03:24:530333デフォルトの名無しさん
2007/11/10(土) 03:26:19struct _person *p;
}
にしたらOKってことか
0334デフォルトの名無しさん
2007/11/10(土) 03:59:010335デフォルトの名無しさん
2007/11/10(土) 04:10:51#include <stdio.h>
int main(void)
{
char *p = "ABCD";
char *q;
q = p;
// q[1] = 'D';
printf("p = %s\nq = %s\n", p, q);
return 0;
}
0336デフォルトの名無しさん
2007/11/10(土) 04:12:55なんでですか?
0337デフォルトの名無しさん
2007/11/10(土) 04:13:260338デフォルトの名無しさん
2007/11/10(土) 04:17:07http://pc11.2ch.net/test/read.cgi/tech/1183559070/
0339デフォルトの名無しさん
2007/11/10(土) 04:19:020340デフォルトの名無しさん
2007/11/10(土) 04:55:070341デフォルトの名無しさん
2007/11/10(土) 05:34:26{
FILE *fin = fopen(fname, "r");
char stemp[256];
hook->next = hook->prev = hook;
if(!fin) return 0;
while(fgets(stemp, 256, fin)){
if(!(hook->prev->next = malloc(sizeof(LINE)))) return 0;
if(!(hook->prev->next->str = malloc(strlen(stemp) + 1))) return 0;
strcpy(hook->prev->next->str, stemp);
hook->prev->next->prev = hook->prev;
hook->prev->next->next = hook;
hook->prev = hook->prev->next;
}
このコードを書いたのは誰だあッ!
hook->prev->next->next とか hook->prev->next->prev とか(平気で書ける神経が)理解できねえ(笑)
http://www.kt.rim.or.jp/~kbk/zakkicho/07/zakkicho0708b.html
■ げねれーた
0342デフォルトの名無しさん
2007/11/10(土) 06:49:28"ABCD" は 暗黙の const char * だから。
0343デフォルトの名無しさん
2007/11/10(土) 07:33:21char p[] = "ABCD";とした時も暗黙のconst char * なのですか?
0344デフォルトの名無しさん
2007/11/10(土) 09:11:300345デフォルトの名無しさん
2007/11/10(土) 10:14:42それは本当の char p[] だわさ。
だから書き換えても大丈夫。
#include <stdio.h>
int main(void)
{
const char p[] = "ABCD";
const char *q;
q = p;
q[1] = 'D';
printf("p = %s\nq = %s\n", p, q);
return 0;
}
をやってみたら?
0346デフォルトの名無しさん
2007/11/10(土) 10:29:36char配列の初期化には、例外的に文字列リテラルが使えるという決まりがあるから。
0347デフォルトの名無しさん
2007/11/10(土) 10:36:20普通に実行できた
$ ./a
p = ADCD
q = ADCD
0348デフォルトの名無しさん
2007/11/10(土) 10:57:43は静的なところにある"ABCD"のアドレスをpに入れてるだけ
って認識であってるよね?
0349デフォルトの名無しさん
2007/11/10(土) 11:17:540350デフォルトの名無しさん
2007/11/10(土) 11:28:17流石に20代だから
流石にアセンブラなんて知りませんよ。流石に
0351デフォルトの名無しさん
2007/11/10(土) 12:50:43いや。読むだけならアセンブラは簡単。
ポインタの理解にはアセンブラが、
オイラの持論だ。
0352デフォルトの名無しさん
2007/11/10(土) 17:36:57メモリとアドレスの事知る必要がある。
それがポインタを理解する上でも必要ってだけのことだ。
運転覚えるのにエンジン分解したいひとは、アセンブラからどうぞ。
0353デフォルトの名無しさん
2007/11/10(土) 17:44:320354デフォルトの名無しさん
2007/11/10(土) 20:26:59int i = *(int*)&f;
printf("%f %f",i,f);
結果:
10.000 10.000
ちょっと遊んでみるw
0355デフォルトの名無しさん
2007/11/10(土) 20:30:30アセンブラを知らないプログラマーは
自動車運転できるのにボンネットを一度も
開けたことの無い人に相当する。
0356デフォルトの名無しさん
2007/11/10(土) 20:38:34ボンネットはウォッシャー液が切れたら空ける
0357デフォルトの名無しさん
2007/11/10(土) 20:45:42アドレスとポインタとは切り分けて考えた方がいいよ
0358デフォルトの名無しさん
2007/11/10(土) 20:47:07アドレスとポインタって違いを3行で
0359デフォルトの名無しさん
2007/11/10(土) 20:52:18アドレスと言う概念にはそんなものは全くない。
強いて言うなら、void * のようなもの。
0360デフォルトの名無しさん
2007/11/10(土) 20:54:12ありがとう
0361デフォルトの名無しさん
2007/11/10(土) 21:00:13ってほんと?
0362デフォルトの名無しさん
2007/11/10(土) 21:01:59変数を間接的に指し示してくれさえすれば用は足りるわけだし
0363デフォルトの名無しさん
2007/11/10(土) 21:13:08うそだろ?
0364デフォルトの名無しさん
2007/11/10(土) 21:19:22お茶碗とごはんの関係。
0365デフォルトの名無しさん
2007/11/10(土) 22:14:510366デフォルトの名無しさん
2007/11/10(土) 22:21:37そのたとえで行くならば、IC やトランジスタ弄ったこと
ない人も同じだな。
0367デフォルトの名無しさん
2007/11/10(土) 23:35:120368デフォルトの名無しさん
2007/11/10(土) 23:39:110369デフォルトの名無しさん
2007/11/11(日) 01:31:28低収入のオマエラじゃ無理だな
0370デフォルトの名無しさん
2007/11/11(日) 01:40:23はいはい、掲示板では何とでもいえるさw
0371デフォルトの名無しさん
2007/11/11(日) 03:08:02実際こう書くこと多いけど何か問題でもあんの?
0372デフォルトの名無しさん
2007/11/11(日) 03:10:510373デフォルトの名無しさん
2007/11/11(日) 03:15:32まぁ論外だ。論外だということを理解できない君が、プログラマでない
ことを願う。
0374デフォルトの名無しさん
2007/11/11(日) 03:31:380375デフォルトの名無しさん
2007/11/11(日) 05:10:31おいおい・・・
0376デフォルトの名無しさん
2007/11/11(日) 08:08:220377デフォルトの名無しさん
2007/11/11(日) 09:51:130378デフォルトの名無しさん
2007/11/11(日) 11:17:010379デフォルトの名無しさん
2007/11/11(日) 12:34:150380デフォルトの名無しさん
2007/11/11(日) 12:51:28結構普通に読めると思うけど
でもこれはポインタの話とは違くねぇ?
0381デフォルトの名無しさん
2007/11/11(日) 12:54:51ポインタは普通の構造体に比べてコピーのコストかからないんだから
逐一名前を付け替えたほうが可読性あがるしそっちのほうが良かろう
0382デフォルトの名無しさん
2007/11/11(日) 13:10:430383デフォルトの名無しさん
2007/11/11(日) 13:57:360384デフォルトの名無しさん
2007/11/11(日) 14:46:49ポインタの問題でつまづいたか?
0385デフォルトの名無しさん
2007/11/11(日) 15:48:43読みやすいってことなの?
0386デフォルトの名無しさん
2007/11/11(日) 17:00:160387デフォルトの名無しさん
2007/11/11(日) 17:59:52「俺、おまえらと違って頭いいんだよ」
と分り難いコードを得意げに自慢げに晒すヤツが
けっこう居る
0388デフォルトの名無しさん
2007/11/11(日) 18:00:330389デフォルトの名無しさん
2007/11/11(日) 18:07:300390デフォルトの名無しさん
2007/11/11(日) 19:10:38ソースコードの読み手が、「このコード大丈夫か?」とか
心配させるようなコード書くようなヤツは頭がいいとは言わない。
ソースコードの読み手が、立ち止まることなく「このコードは
大丈夫」だと確信しながら、スラスラ読めるコードを書くヤツは
頭がいい。
結論としては>>341のようなコードを書くヤツは頭が悪い。
0391デフォルトの名無しさん
2007/11/11(日) 19:12:10高齢化社会を迎える日本だと特にそうだ。
戦後の日本文学が、難解であれば崇高だと勘違いして衰退してしまった反省を
ソースコードにおいても生かしてほしいもんだ。
0392デフォルトの名無しさん
2007/11/11(日) 19:33:55読む人のレベルにもよりませんか?
0393デフォルトの名無しさん
2007/11/11(日) 19:37:09うん
0394デフォルトの名無しさん
2007/11/11(日) 19:52:45もちろんプログラマとしての常識は、身につけている
という前提は必要。
常識というのは、言語に関する知識、アルゴリズムに
関する知識、慣用句に関する知識くらいかな。パッと
思いつく限り。
あとは、プログラムが対象としている分野ごとの
知識は前提とするけど。例えば、デコーダのプログラム
のソースコードならば、読み手がそのデコードの
アルゴリズムを知っているという前提をした上で、
プログラムを書くことになる。
0395デフォルトの名無しさん
2007/11/11(日) 20:01:26色々ありすぎて、「言語に関する知識」「アルゴリズムに関する知識」という定義が
やっぱり人それぞれになってしまうと思う。
0396デフォルトの名無しさん
2007/11/11(日) 21:04:45それはどれも応用プログラミングの専門知識であって常識ではないんじゃないか。
現場の常識という事はあるかもしれないが、それでは一般論とはいえない。
ある範囲で分野を定義した時にその中の最低限の知識というのがあるわけで、
それ以上のテクニックだかノウハウだかを理由も無く濫用するのが良い習慣でないのは
間違いないだろう。
0397デフォルトの名無しさん
2007/11/11(日) 21:07:570398デフォルトの名無しさん
2007/11/11(日) 23:01:25だいたい1:9ぐらいかな。
0399デフォルトの名無しさん
2007/11/12(月) 16:34:54…って思うもんさ、プログラマなら…
0400デフォルトの名無しさん
2007/11/12(月) 18:32:40これがC#のプロパティで同じことやられたりしたら、
もう理解不能だな。
0401デフォルトの名無しさん
2007/11/13(火) 17:11:27{ " ##",
" # #",
" # #",
" #####",
" # #",
"# #"},
{ "##### ",
" # #",
"##### ",
" # #",
" # #",
"######"},
{ " ####",
" ## #",
" # ",
"## ",
" ## #",
" ####"},
。。。略・・・
0402デフォルトの名無しさん
2007/11/13(火) 17:13:41SEの兄がいつも独り言で死にたいあー死にたいってよく独り言を言ってます
そんなに仕事は厳しいんですか?
465 名前:仕様書無しさん 投稿日:2007/11/13(火) 16:35:49
動かないものを動きますと言わないといけないからとか?
0403デフォルトの名無しさん
2007/11/13(火) 18:16:53最初からそういうもんだと思ってたからあまり考えなかったけど。
int *p, *q;
じゃなくて
*int p, q;
にすりゃいいんだ。
0404デフォルトの名無しさん
2007/11/13(火) 18:18:20こうだろ
0405デフォルトの名無しさん
2007/11/13(火) 18:48:11その記法で関数ポインタとポインタを返す関数をどうやって区別する?
0406デフォルトの名無しさん
2007/11/13(火) 19:31:17実際、C++だとstd::tr1::add_pointer<int>::typeとか
boost::mpl::identity<int*>::typeとか書ける。
::typeとか冗長だけどうまく使えば便利に思うこともある。
0407デフォルトの名無しさん
2007/11/13(火) 21:39:21int* p = &a;
ってしたら、*pでaの値を変更できる?
*&a ってした場合は、どう?
0408デフォルトの名無しさん
2007/11/13(火) 21:49:06const int a = 1;
const int* p = &a;
ってしたら、*pでaの値を変更できる?
*&a ってした場合は、どう?
0409デフォルトの名無しさん
2007/11/13(火) 22:10:440410デフォルトの名無しさん
2007/11/14(水) 05:54:34#include <stdio.h>
int main(int argc, char** argv) //char *argv[]
{
const int a = 1;
const int* p = &a;
printf("a=%d *p=%d\n&a=%p p=%d\n", a, *p, &a, p);
return 0;
}
FreeBSDでの結果
a=1 *p=1
&a=0xbfbff8fc p=-1077937924
0411デフォルトの名無しさん
2007/11/14(水) 05:56:03#include <stdio.h>
int main(int argc, char** argv) //char *argv[]
{
const int a = 1;
const int* p = &a;
printf("a=%d *p=%d\n&a=%p p=%d\n", a, *p, &a, p);
*p = 5;
a = 9;
printf("a=%d *p=%d\n&a=%p p=%d\n", a, *p, &a, p);
return 0;
}
コンパイルエラー ×2ケ所
0412デフォルトの名無しさん
2007/11/14(水) 05:57:54最後は%dじゃなくて%p
printf("a=%d *p=%d\n&a=%p p=%p\n", a, *p, &a, p);
FreeBSDでの結果
a=1 *p=1
&a=0xbfbff8fc p=0xbfbff8fc
0413デフォルトの名無しさん
2007/11/14(水) 09:13:50あ、何となくわかってきた。
タイプ
ア
ド データ
レ
ス
アドレス*タイプでデータを指し示すから、*pで、データをアドレス&タイプに変換するから、
&aなんだな。
0414デフォルトの名無しさん
2007/11/14(水) 09:17:240415デフォルトの名無しさん
2007/11/14(水) 09:21:59「*」や「&」という変な文字を使う理由について推測しただけ。
0416デフォルトの名無しさん
2007/11/14(水) 09:45:47*はポインタの先にある実体を得る演算子
p = &a;
は変数aのアドレスをポインタpに代入。
*p = 5;
はpに入っているアドレスの先を書き換える処理
というのは理解してるのかな?
0417デフォルトの名無しさん
2007/11/14(水) 13:08:50longかなんかの変数にポインタを代入して、いろいろやってたら何となく分かって来るよ。きっと。
環境依存だけど。
0418デフォルトの名無しさん
2007/11/14(水) 13:47:370419デフォルトの名無しさん
2007/11/14(水) 17:34:00アセンブリ言語使ってみろというほうがずっと有意義。
0420デフォルトの名無しさん
2007/11/14(水) 17:39:28JavaとかC#とかの高級言語触らせたほうが、どうしてポインタが欲しくなるのかを理解するのにはいいんじゃないか?
0421デフォルトの名無しさん
2007/11/14(水) 18:00:35JavaとかC#だって、ポインタはあるのだから、欲しくなんてならない。
0422デフォルトの名無しさん
2007/11/14(水) 18:01:060423デフォルトの名無しさん
2007/11/14(水) 18:02:490424デフォルトの名無しさん
2007/11/14(水) 18:03:530425デフォルトの名無しさん
2007/11/14(水) 18:06:45ちげーよ、安全に使えるようになってるから理解しやすいかと思ったんだよ。
0426デフォルトの名無しさん
2007/11/14(水) 18:06:590427デフォルトの名無しさん
2007/11/14(水) 18:07:34ヒント:ぬるぽ
0428デフォルトの名無しさん
2007/11/14(水) 18:08:29ポインタは無いよ
0429デフォルトの名無しさん
2007/11/14(水) 18:11:19アセンブラは良く知らんが同意
>>421
趣味でちょっとしたTCP/IPプロトコルを実装しているんだが
ポインタがないと俺には無理ってぐらいだ
こんなものをC#とかJavaとか他の言語でどうやって書けと(ry
ポインタとmemcpyを使ってソース書くときれいになって読みやすくなってるぞ
0430デフォルトの名無しさん
2007/11/14(水) 18:13:310431デフォルトの名無しさん
2007/11/14(水) 18:15:320433デフォルトの名無しさん
2007/11/14(水) 18:22:260434デフォルトの名無しさん
2007/11/14(水) 18:23:120435デフォルトの名無しさん
2007/11/14(水) 18:29:180436デフォルトの名無しさん
2007/11/14(水) 18:37:230437デフォルトの名無しさん
2007/11/14(水) 23:10:45結局根拠無し?
0439デフォルトの名無しさん
2007/11/16(金) 07:30:47インストラクションコードの知識が必要になるのは、もっとずっと後。
0440デフォルトの名無しさん
2007/11/16(金) 08:37:130441デフォルトの名無しさん
2007/11/16(金) 09:11:570442デフォルトの名無しさん
2007/11/16(金) 21:44:400443デフォルトの名無しさん
2007/11/17(土) 02:40:140444デフォルトの名無しさん
2007/11/17(土) 06:48:290445デフォルトの名無しさん
2007/11/17(土) 07:24:470446デフォルトの名無しさん
2007/11/17(土) 07:32:120447デフォルトの名無しさん
2007/11/18(日) 10:52:54でいいんじゃね?
0448デフォルトの名無しさん
2007/11/18(日) 12:01:500449デフォルトの名無しさん
2007/11/18(日) 12:56:380450デフォルトの名無しさん
2007/11/18(日) 14:15:25char *cp;
int *ip;
/* いろいろやる */
cp++;
ip++;
の最後の2行の挙動が>>447には含まれてないってことじゃね?
0451デフォルトの名無しさん
2007/11/18(日) 14:37:46では447の補足。
ポインタには加算減算が定義されている。加算結果のアドレスがいくつ増えるかはポインタの型に依存する。
intが4バイトの処理系でintのポインタに+1するとアドレスは4バイト移動する。
これはメモリ上の連続領域にかかれたintデータにアクセスする際に便利。
ぜんぜんわかりやすくないな。サーセン。
0452デフォルトの名無しさん
2007/11/18(日) 14:39:50では447の補足。
ポインタには加算減算が定義されている。加算結果のアドレスがいくつ増えるかはポインタの型に依存する。
intが4バイトの処理系でintのポインタに+1するとアドレスは4バイト移動する。
これはメモリ上の連続領域にかかれたintデータにアクセスする際に便利。
ぜんぜんわかりやすくないな。サーセン。
0453デフォルトの名無しさん
2007/11/18(日) 14:40:05こういう仕様が表に出ている事のメリットがいまひとつわからない
0454デフォルトの名無しさん
2007/11/18(日) 15:10:32厳密に言うとメモリ上にない変数もあるのだ、ふっふっふ。
0455デフォルトの名無しさん
2007/11/18(日) 15:25:00まぁポインタの話をするときはメモリ上って事でいいのでは?
0456デフォルトの名無しさん
2007/11/18(日) 15:26:360457デフォルトの名無しさん
2007/11/18(日) 16:12:240458デフォルトの名無しさん
2007/11/18(日) 16:28:510459デフォルトの名無しさん
2007/11/18(日) 16:34:56register int i;
&i;
ってやってみるといいよ。コンパイラに怒られるから。
0460デフォルトの名無しさん
2007/11/18(日) 16:50:18じゃない?実際任せるしか無いと思うけど。多少配慮は
してくれるはずだが、下手するとかえって遅くなる場合もある。
CPU 上の話はまたそれはそれで違うよね。
0461デフォルトの名無しさん
2007/11/18(日) 17:48:35高級言語でわざわざ意識する機会なんてまず無いわ
0462デフォルトの名無しさん
2007/11/18(日) 17:50:140463デフォルトの名無しさん
2007/11/18(日) 18:26:58ただしアドレスだけは取れないようになっている。
0464デフォルトの名無しさん
2007/11/18(日) 21:02:19とか一所懸命自分のコードで調べてた覚えがあるな。けどもうずっと使って
なくてコンパイラ任せ。
0465デフォルトの名無しさん
2007/11/20(火) 16:08:13少ない資源で必死に高速化してた頃が懐かしす。
0466デフォルトの名無しさん
2007/11/20(火) 17:48:310467デフォルトの名無しさん
2007/11/21(水) 15:31:110468デフォルトの名無しさん
2007/11/21(水) 16:32:17レジスタが空いてないなら勝手に使われないだけなんだから。
0469デフォルトの名無しさん
2007/11/21(水) 16:41:02組み込み系だったらつけるのはわかるけど、
それ以外だったら間抜け以外の何物でもない。
下手したらオプティマイザーを混乱させてかえって遅くなることもあるし。
つっても今の処理系だったらみんな無視するだろうから大丈夫とは思うけど。
なので場所を弁えずregister修飾入れているやつはど素人。
0470デフォルトの名無しさん
2007/11/21(水) 16:44:13逆!逆!よっぽどの理由がない限りつけないのが普通だってば
0471デフォルトの名無しさん
2007/11/21(水) 18:50:120472デフォルトの名無しさん
2007/11/21(水) 19:08:200473デフォルトの名無しさん
2007/11/21(水) 19:39:280474デフォルトの名無しさん
2007/11/21(水) 20:23:130475デフォルトの名無しさん
2007/11/21(水) 22:12:010476デフォルトの名無しさん
2007/11/21(水) 22:21:490477デフォルトの名無しさん
2007/11/24(土) 10:45:17いろんな環境に移植するソースで、いちいちregister付けたり
外したりなんて馬鹿らしくてできん。
0478デフォルトの名無しさん
2007/11/25(日) 13:08:45C++では、「ヌルポを(void *)0って定義してはダメ」って記述されてる
本があるけど、その理由も分からん。
結局、ヌルポは、どう理解しておいたらいいのだ?
Cでは、ヌルポの型は、(void *)なの?
C++では、ヌルポの型は、なんだ?
0479デフォルトの名無しさん
2007/11/25(日) 13:24:310がダメって言ってるだけじゃないの?
C自体も0とは定義してないはず
型は・・・どうなんだろう
強いて言えばvoid *型な気がするけど
0480デフォルトの名無しさん
2007/11/25(日) 13:50:17この法則に則って考えれば、NULLはCでもC++でも0と定義されるべきであり、それ自体は8進定数と言うことになる。
0481デフォルトの名無しさん
2007/11/25(日) 13:55:36ちなみになんで8進?
0482デフォルトの名無しさん
2007/11/25(日) 14:14:330483デフォルトの名無しさん
2007/11/25(日) 14:16:21普通に変わった変数としてポインタ教えてたら
やっぱり2年目になっても分かってなかった
0484デフォルトの名無しさん
2007/11/25(日) 14:16:550485デフォルトの名無しさん
2007/11/25(日) 14:17:150486デフォルトの名無しさん
2007/11/25(日) 14:21:100487デフォルトの名無しさん
2007/11/25(日) 14:22:53いや、分数の割り算程度でしょ
0488デフォルトの名無しさん
2007/11/25(日) 14:24:090489デフォルトの名無しさん
2007/11/25(日) 14:27:410490デフォルトの名無しさん
2007/11/25(日) 14:31:09とくとくと語ってみたら面接官涙目になってた。
0491デフォルトの名無しさん
2007/11/25(日) 14:32:16ウチの会社は総務だか人事だかがやってたなぁ・・・
0492デフォルトの名無しさん
2007/11/25(日) 14:44:45どうなってるのか少しも考えてこなかった証拠じゃね?
コンピュータの中で関数がどうやって呼び出されてるのとか、
変数はどうやってわたされてるのとか、
時計の針はどうやってまわるのとか、
えんぴつとか棒付きアイスはどうやってつくるのとか
普通は自分なりに考えてみるものじゃん
0493デフォルトの名無しさん
2007/11/25(日) 14:46:380494デフォルトの名無しさん
2007/11/25(日) 14:57:32そうやって裏側の裏側の裏側の……って調べていくとキリがないので、
あるところで計算を打ち切ってcall-by-needで遅延的な思考をすることだってあろう。
そのためにいろんな学問やら処理系やらは多層構造になってるし、
インターフェースが決まってれば実装が見えなくたってかまわないんでしょうよ。
コンピュータをやるなら最低でもアセンブラとかマシン語が云々、とかいう人はそこが分かってない。
0495デフォルトの名無しさん
2007/11/25(日) 15:03:530496デフォルトの名無しさん
2007/11/25(日) 15:19:540497デフォルトの名無しさん
2007/11/25(日) 15:21:360498デフォルトの名無しさん
2007/11/25(日) 15:26:45違うんだ
具体的な仕組みを正確につきとめるというより
少なくとも自分のなかでつじつまが合うように
モノゴトの裏側を想像するってこと
抽象化して考えることが出来る奴は、少なくとも
具体の一例を想像して挙げてみることができると思う
0499デフォルトの名無しさん
2007/11/25(日) 15:38:000500デフォルトの名無しさん
2007/11/25(日) 15:39:28ぬるぽは、あらゆるポインタ型について存在する。
int*のぬるぽ、void*のぬるぽ、char*のぬるぽ、void(Foo::*)(void)のぬるぽ・・・
定数「0」は任意の型のぬるぽに暗黙に変換できるので、NULLマクロを0と定義しているのは妥当。
単なる0でなく(void*)0と定義してる場合もあるが、その理由は、単なる0は整数型にもなるので、
char c = NULL;
と書くバカがしばしば現れるため。
(void*)0は整数型としては通らないので、これで一応そういうバカを少しは防げる。
Cではvoid*はあらゆるポインタ型に暗黙に変換できるので、これでも特に問題はない。
C++ではvoid*の暗黙の変換が無くなったので、(void*)0をNULLの定義には使えなくなった。
つまり例えば
int *p = (void*)0;
というのはCでは通るがC++では通らない。
0501デフォルトの名無しさん
2007/11/25(日) 16:08:1716進定数は0xで始まらないといけないので、数値0をあらわすには0x0とする必要がある。
0502デフォルトの名無しさん
2007/11/25(日) 17:58:23kwsk
0503デフォルトの名無しさん
2007/11/25(日) 17:59:570504デフォルトの名無しさん
2007/11/25(日) 18:00:500505デフォルトの名無しさん
2007/11/25(日) 18:33:060506デフォルトの名無しさん
2007/11/25(日) 20:31:040507デフォルトの名無しさん
2007/11/25(日) 22:59:05なぜ NullPointerException が出てくるんですか?
0508デフォルトの名無しさん
2007/11/25(日) 23:03:290509デフォルトの名無しさん
2007/11/25(日) 23:12:29ガッ
0510デフォルトの名無しさん
2007/11/25(日) 23:17:320511デフォルトの名無しさん
2007/11/26(月) 18:22:200512デフォルトの名無しさん
2007/11/26(月) 20:19:170513デフォルトの名無しさん
2007/11/26(月) 23:54:110514デフォルトの名無しさん
2007/11/27(火) 00:38:360515デフォルトの名無しさん
2007/11/27(火) 02:53:01こっちは結局よくわからんかった。著者はCを知らないっぽ
http://www.amazon.co.jp/product/dp/4798011924
0516デフォルトの名無しさん
2007/11/27(火) 13:53:190517デフォルトの名無しさん
2007/11/27(火) 16:40:330518デフォルトの名無しさん
2007/11/27(火) 19:44:39かつ、オブジェクトでも明示的なアドレス演算ができないという意味では
ポインタとしては不完全。
0519デフォルトの名無しさん
2007/11/27(火) 21:33:490520デフォルトの名無しさん
2007/11/27(火) 21:37:370521デフォルトの名無しさん
2007/11/28(水) 00:47:470522デフォルトの名無しさん
2007/11/28(水) 01:33:430523デフォルトの名無しさん
2007/11/28(水) 01:39:010524デフォルトの名無しさん
2007/11/28(水) 07:01:350525デフォルトの名無しさん
2007/11/28(水) 08:10:570526デフォルトの名無しさん
2007/11/29(木) 12:49:27ポインタのないC#が理想系にもっとも近い。
C++のように氾濫するライブラリを使いこなすためにキャストの嵐もないし。
0527デフォルトの名無しさん
2007/11/29(木) 13:05:360528デフォルトの名無しさん
2007/11/29(木) 13:10:450529デフォルトの名無しさん
2007/11/29(木) 13:12:100530デフォルトの名無しさん
2007/11/29(木) 14:18:08自分で一から作るならいいけど、実際の現場じゃ色んな人が触ったソースも
見なきゃならないわけで、当然のように色んなライブラリが使われてる。
次から次へと覚えることが多すぎてヘボな俺の頭はついてけないぜ。
あとC++は文字列だけを見てもCString、std::string、System::String*、TCHAR*、WCHAR*、
CAtlString、BSTR、CComBSTRなどなど。おぞましいほど多様な形態がある。
C#だと、ほぼstring型で統一されてるだがなぁ。
C++は使い古されてもうカオス状態。言語としては何でもできる良い言語だけど
俺はもう嫌だ。ボスケテー
0531デフォルトの名無しさん
2007/11/29(木) 18:54:21それはC++のせいではない。
そこの区別がつかないようでは(略
0532デフォルトの名無しさん
2007/11/29(木) 19:00:490533デフォルトの名無しさん
2007/11/29(木) 20:26:420534デフォルトの名無しさん
2007/11/29(木) 20:38:540535デフォルトの名無しさん
2007/11/29(木) 20:56:17自分でさらっと書くのには Java とかより楽で好きだけど、
他人のコードには手を入れたくないな。
0536デフォルトの名無しさん
2007/11/29(木) 21:32:12自分のが一番綺麗だと思ってるうちはまだまだ未熟
0537デフォルトの名無しさん
2007/11/29(木) 22:04:300538デフォルトの名無しさん
2007/11/29(木) 22:28:55別にきれいだと思っているとは書いていないよ。勉強して努力はしているが。
できるだけ自分で責任を持って直したいと思ってる。
0539デフォルトの名無しさん
2007/11/29(木) 22:36:540540デフォルトの名無しさん
2007/11/30(金) 01:39:03仕事では、使いたくねぇ
0541デフォルトの名無しさん
2007/11/30(金) 02:52:10ポインタを語るスレではないからな
そもそも学びたい奴がいないならこのスレいらんだろ
ポインタがわからんやつとかいないじゃん
0542デフォルトの名無しさん
2007/11/30(金) 13:07:43ポインタわかんない人も来るだろw
0543デフォルトの名無しさん
2007/11/30(金) 17:01:39関数は常に値渡し
参照渡しでも結局はアドレスと言う値を渡してるに過ぎない
って認識であってる?
0544デフォルトの名無しさん
2007/11/30(金) 17:06:450545デフォルトの名無しさん
2007/11/30(金) 19:29:270546デフォルトの名無しさん
2007/11/30(金) 19:34:13言語なんて勉強する意味がない。
コーダーは中国から買ってくれば良い
0547デフォルトの名無しさん
2007/11/30(金) 19:38:14私は自分のためにCやポインタを勉強する。
0548デフォルトの名無しさん
2007/11/30(金) 19:40:590549デフォルトの名無しさん
2007/11/30(金) 19:41:400550デフォルトの名無しさん
2007/11/30(金) 19:43:55まともなコードが描ける頃には髪の毛白くなってそうだよ
0551デフォルトの名無しさん
2007/11/30(金) 19:47:09無知か?おまえ
0552デフォルトの名無しさん
2007/11/30(金) 19:48:000553デフォルトの名無しさん
2007/11/30(金) 20:02:31コード書けばいいと思うがなw
コーダーなんてインドから集めてくればいい
0554デフォルトの名無しさん
2007/11/30(金) 20:04:250555デフォルトの名無しさん
2007/11/30(金) 20:05:040556デフォルトの名無しさん
2007/11/30(金) 21:20:070557デフォルトの名無しさん
2007/11/30(金) 21:41:590558デフォルトの名無しさん
2007/11/30(金) 21:43:340559デフォルトの名無しさん
2007/11/30(金) 21:47:34なんで日本の文化ではコード書きは底辺がすることって信じられてるの?
0560デフォルトの名無しさん
2007/11/30(金) 21:52:06#define NULL 0
0561デフォルトの名無しさん
2007/11/30(金) 21:58:37それが一番妥当かつ効率性が高いとう結果
なんだよ。結局コードなんて書いても成果を
出しましたって小細工しているにすぎないからな
0562デフォルトの名無しさん
2007/11/30(金) 22:01:240563デフォルトの名無しさん
2007/11/30(金) 22:07:28書くモノしか見てないけど Google とか技術部いい感じだよね。
Norvig さんとか。
0564デフォルトの名無しさん
2007/11/30(金) 22:23:070565デフォルトの名無しさん
2007/11/30(金) 22:39:04コードも書けない奴の言うことなんて誰もきかない。
0566デフォルトの名無しさん
2007/11/30(金) 22:49:300567デフォルトの名無しさん
2007/11/30(金) 23:08:53コーダにコーディングをアウトソースするときに、インプットとして「コード」が必要になったってこと
昔と大して変わってない
0568デフォルトの名無しさん
2007/11/30(金) 23:25:48カレー注文したらスプーンがついてこなくて
「あ、本格的な店なんだ」とか思って手で食ってたら、
半分くらい食ったときに、インド人の店員が奥から
すげー申し訳なさそうな顔してスプーン持ってきた
0569デフォルトの名無しさん
2007/11/30(金) 23:34:53おもしろいコピペがあったら貼るスレinマ板part4
http://pc11.2ch.net/test/read.cgi/prog/1194955716/l50
0570デフォルトの名無しさん
2007/12/04(火) 15:03:580571デフォルトの名無しさん
2007/12/04(火) 17:44:08が改悪したようにしか見えない件についてw
0572デフォルトの名無しさん
2007/12/10(月) 21:58:52Javaばかりでプログラム組んでいてC++にに戻ってきたらメモリ管理だるすぎて泣きそうだw
Javaはメモリ管理が楽だからいいよな
よくC#、Javaはポインタがなくて良いとか言う奴いるけど、これらの言語の利点はメモリ管理の楽さだろと突っ込みたいぜw
それにC#、Javaはむしろポインタの固まりだしな
C++のメモリ管理の経験があると、ガーベジコレクション等に負担をかけず高速なプログラムを組めることが身に染みてわかったぜ、自動解放だからってテキトーに組むとメモリリークは発生しないにしろ遅いなw
結論、C++のようなメモリ周りがシビアな言語をやる価値は今でも十分すぎるほどあると
0573デフォルトの名無しさん
2007/12/10(月) 22:40:350574デフォルトの名無しさん
2007/12/10(月) 22:52:08C++ならスマートポインタ実装すればいいのに
0575デフォルトの名無しさん
2007/12/11(火) 07:28:30JavaやC#だと、本当にリークしてないのか不安になってたまらない
0576デフォルトの名無しさん
2007/12/11(火) 13:56:300577デフォルトの名無しさん
2007/12/11(火) 15:47:48元々もっさりなのに時々かくかくではストレスもたまる
0578デフォルトの名無しさん
2007/12/11(火) 16:24:290579デフォルトの名無しさん
2007/12/11(火) 17:21:570580デフォルトの名無しさん
2007/12/13(木) 16:16:38で&arrayってvoid*?
0581デフォルトの名無しさん
2007/12/13(木) 16:52:140582デフォルトの名無しさん
2007/12/13(木) 17:04:52int (*)[10]か。
>>581
あれ?それでもいいの?
試してみます
0583デフォルトの名無しさん
2007/12/13(木) 17:13:530584582
2007/12/13(木) 17:24:090585デフォルトの名無しさん
2007/12/13(木) 17:32:46俺にはC++のメモリ管理がだるいと感じるお前が理解できない
new したらdeleteすればいいだけじゃん
なにがだるいんだか・・・
0586デフォルトの名無しさん
2007/12/13(木) 17:36:050587デフォルトの名無しさん
2007/12/13(木) 18:31:19C++のメモリ管理ってスマポンタだろ
0588デフォルトの名無しさん
2007/12/13(木) 18:33:31配列名だけで先頭要素のアドレスになる。
ただし、それは変数じゃないので&を付けても無駄。
int array[10];
printf("%p¥n", array);
printf("%p¥n", &array);
で試してごらん。
0589デフォルトの名無しさん
2007/12/13(木) 18:34:41よきにはからえ、じゃないと駄目だよね。
ゆとりプログラミングの時代さ。
0590デフォルトの名無しさん
2007/12/13(木) 19:24:19arrayは配列の先頭要素へのポインタ
&arrayは配列へのポインタ
だから値は同じだけど意味が違うんじゃないですか?
0591デフォルトの名無しさん
2007/12/13(木) 19:51:16コンパイラ使うのも似たような言葉で馬鹿にされたものだけどね。
0592デフォルトの名無しさん
2007/12/13(木) 21:53:28違う。
arrayはポインタでは「ない」。
ポインタは変数。配列名は定数。
0593デフォルトの名無しさん
2007/12/13(木) 21:57:390594デフォルトの名無しさん
2007/12/13(木) 22:11:130595デフォルトの名無しさん
2007/12/13(木) 23:43:500596デフォルトの名無しさん
2007/12/14(金) 10:44:32と言うニュアンスでK&Rで解説されたために、
その後のC言語の入門書で、
よく分ってないヤツがゴチャゴチャにして説明するようになって、
今に至る
0597デフォルトの名無しさん
2007/12/14(金) 11:49:52だと思うが引数として使うってのが
けっこうメジャーな使いかたなためごっちゃになってるって
状況だとおれは認識してる。
0598デフォルトの名無しさん
2007/12/14(金) 11:55:35>基本的に違うけど引数としてはどっちでもとれるって状況
間違い。
引き数としては、常にポインタ。
# 但し、Cの場合。
0599デフォルトの名無しさん
2007/12/14(金) 12:36:310600デフォルトの名無しさん
2007/12/14(金) 16:41:13自分がnewしてdeleteするなら別に面倒では無いだろうけど
リスト構造でなおかつ、その構造が要素追加にnew、削除にdeleteを使うようなプログラムはが何万行と続くとデバック作業がかなり面倒だろ?まあ、それはそれで利点もあるがな
それを面倒臭くないというお前はすごいな、それとも極小規模なプログラムしか組んだことないのかな?
0601デフォルトの名無しさん
2007/12/14(金) 17:58:01配列は箱を列に並べたもの
ポインタは矢印
でいいかな?
0602デフォルトの名無しさん
2007/12/14(金) 18:43:34大学のレポートって、お絵かきでOKなの?
0603デフォルトの名無しさん
2007/12/14(金) 18:59:17そういうことじゃなくてポインタ変数でも配列変数でも
代入できるだろうって意味。
0604デフォルトの名無しさん
2007/12/14(金) 19:25:33住所そのものを変えるには市町村合併でもするほかないが紙に書かれた住所を書き換えるだけなら簡単
0605デフォルトの名無しさん
2007/12/14(金) 19:31:58なんかオブジェクト指向の例え話なみに微妙な話だな
0606デフォルトの名無しさん
2007/12/14(金) 19:50:480607デフォルトの名無しさん
2007/12/14(金) 19:54:39[C言語 ポインタ完全制覇]
読んで理解したなら
後は、実践を繰り返すだけだろーよ
0608デフォルトの名無しさん
2007/12/14(金) 19:56:31覚えやすくできてんだからそれでいいじゃんよ。
0609デフォルトの名無しさん
2007/12/14(金) 20:05:30http://www.kouno.jp/home/c_faq/c6.html#13
http://c-faq.com/aryptr/ptrtoarray.html
に
・・・本当に配列そのものへのポインターが必要な場合は「int (*ap)[N];」 のような表現を使う。
ここでNは配列のサイズを表す(質問1.21も参照)。
配列の大きさがわからない場合、Nを省略することができる。
しかし 結果として得られる「大きさが未知の配列へのポインター」は役に立たない。
ってあるんですが、
int array[10];
int (*ap)[];
ap = &arrrayってエラーにならないんですか?
0610デフォルトの名無しさん
2007/12/14(金) 20:17:14配列の不完全型ってヤツか?
良く分からんが、違う構造体同士で相互参照する時なんかに使う
構造体の不完全型の親戚みたいなもんかな
0611デフォルトの名無しさん
2007/12/15(土) 02:27:42試せば良いじゃんよ
0612デフォルトの名無しさん
2007/12/15(土) 02:32:55d:\work\vc\array\arrayptr.cpp(9) : error C2440: '=' : 'int (*__w64 )[10]' から 'int (*)[]' に変換できません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
0613デフォルトの名無しさん
2007/12/15(土) 04:19:56アドレスの概念を理解しないでいきなりやるから
難しくなるんだよ!!
0614デフォルトの名無しさん
2007/12/15(土) 05:35:260615デフォルトの名無しさん
2007/12/15(土) 08:55:36さらにそれのアドレスが欲しい場合ってどういうケース?想像つかないんだけど。
0616デフォルトの名無しさん
2007/12/15(土) 10:40:49#include <stdio.h>
#define N 5
void aryfunc(int ary[N][N])
{
int *temp;
for(temp = &ary[0][0]; temp != &ary[N-1][N]; temp++){
(*temp)++;
}
}
int main()
{
int ary[N][N] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},
{16,17,18,19,20},{21,22,23,24,25}};
int *temp,i;
for(temp = &ary[0][0],i = 1; temp != &ary[N-1][N]; temp++,i++){
printf("%d ",*temp);
if(!(i%5))
putchar('\n');
}
aryfunc(ary);
for(temp = &ary[0][0],i = 1; temp != &ary[N-1][N]; temp++,i++){
printf("%d ",*temp);
if(!(i%5))
putchar('\n');
}
return 0;
}
0617デフォルトの名無しさん
2007/12/15(土) 12:08:10添字でアクセスできるのに、わざわざポインタつかってわかりにくくしてる気がするんだが。
↓と同じことでしょ?
void aryfunc(int ary[N][N])
{
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
ary[i][j]++;
}
}
}
0618デフォルトの名無しさん
2007/12/15(土) 12:11:15配列の配列とか、配列の配列の配列とか、つまり多次元配列を
関数の引数として渡すときに必要だな
0619デフォルトの名無しさん
2007/12/15(土) 12:15:46配列名は、配列の「先頭の要素」のアドレス。
配列名に&をつけた場合は配列「そのものの」のアドレス。
ポインタの値としては同じ値だが、意味が違う。
なんか思い違いをしてる気がするぜよ
0620615
2007/12/15(土) 12:48:40多次元配列も、型と先頭アドレスと要素数を何らかの形で渡せばいいわけだから、
アドレスに関しては配列名のみを渡せばいいんじゃないの?
>>619
意味の違いは理解してるつもりだが、これじゃなきゃできない、というケースが思いつかなくてさ。
先頭の要素のアドレスと、配列そのもののアドレスが違うことがあれば理解もできるってもんだが…
0621デフォルトの名無しさん
2007/12/15(土) 13:12:30値同じだから意味は同じ
しょうもねー議論してるんじゃねーよw
0622デフォルトの名無しさん
2007/12/15(土) 13:22:070623デフォルトの名無しさん
2007/12/15(土) 13:54:30型が違うから意味は違うだろ
0624デフォルトの名無しさん
2007/12/15(土) 14:29:01おまい、ポインタはvoid*さえあればいい派だなw
0625デフォルトの名無しさん
2007/12/15(土) 14:51:34void **あれば何もいらねーだろ。
型に束縛される書き方してると
汎用性失う言語だし
携帯のドライバなんかは
int Inithoge(void * data1, void *data2, void *data3)
こんなの普通だぞ?
0626デフォルトの名無しさん
2007/12/15(土) 15:01:070627デフォルトの名無しさん
2007/12/15(土) 15:42:40>>配列の配列は、ポインターへのポインターに成り下がることはない。
これを読んで思ったんだけど、
int main(int argc, char **argv)は間違い(行儀が悪い)で、
int main(int argc, char *argv[])が正しい(行儀が良い)の?
0628デフォルトの名無しさん
2007/12/15(土) 16:43:52関数の引数は常にポインタしかとらない。
字面上配列の形をしていても、そいつはポインタだ。
だから、
void foo(char *pa[]);
void bar(char **pp);
char aa[10][10];
という関数と配列の配列があったとして、以下の呼び出し
foo(aa);
bar(aa);
のどちらも違法(コンパイラが怒る)だ。
これが「配列の配列は、ポインターへのポインターへ成り下がることはない」の意味だ。
ちなみにmainに渡されるargvはポインタの配列であり、これはポインタのポインタで受けられる。
0629デフォルトの名無しさん
2007/12/15(土) 18:02:39void hoge(char str[])を
void hoge(char *str)と書けるのと一緒で
int main(int argc, char *argv[])を
int main(int argc, char **argv)って書くのは全然おかしくないわけか。
むしろ後者の方が実際にやっていることとイメージが近いな。
0630デフォルトの名無しさん
2007/12/15(土) 18:45:170631デフォルトの名無しさん
2007/12/16(日) 06:01:17いくら説明しても全く理解できないヤツ、
会社に一人くらいいるよな・・・
プロのプログラマーのはずなのに
0632デフォルトの名無しさん
2007/12/16(日) 06:05:55・配列を「何かが入っている箱」
という図を描いてみて、その上で配列の配列とポインタの配列を描いてみればすぐわかると思うんだけどな。
0633デフォルトの名無しさん
2007/12/16(日) 11:13:25専門書籍で使われてる言葉をそのまま使っても伝わらないよ
一度日本語に直す、相手に伝わる言葉に直す
そういうリファクタリングを繰り返してバカ矯正プログラムが完成するんだ
0634デフォルトの名無しさん
2007/12/16(日) 16:47:550635デフォルトの名無しさん
2007/12/16(日) 17:07:400636デフォルトの名無しさん
2007/12/16(日) 21:45:05理系文系だ関係なく読解問題が苦手なの増えてるだろ?
だからこっちでイメージを用意してやりようやく相手が理解できる
マンガと同じだわ
0637デフォルトの名無しさん
2007/12/16(日) 22:15:45嫌韓を読めばよくあの国が理解できるのと一緒
0638デフォルトの名無しさん
2007/12/16(日) 22:49:12全編挿絵っつうか
0639デフォルトの名無しさん
2007/12/16(日) 23:05:44ゆとりだと自己主張しているものだな。
このスレ削除でよくねーか?
0640デフォルトの名無しさん
2007/12/16(日) 23:08:20削除しないで放置しておいて欲しい
0641デフォルトの名無しさん
2007/12/16(日) 23:13:43どんどん話題が枝葉にそれてるだけで
0642デフォルトの名無しさん
2007/12/17(月) 00:08:20アドレスの代入、アドレスが示す値の参照
関数へのアドレス渡し
ポインタを利用するアルゴリズムを理解
こんな感じでさ
0643デフォルトの名無しさん
2007/12/17(月) 00:14:320644デフォルトの名無しさん
2007/12/17(月) 01:39:57人生に手遅れって言葉はないと思うんだ
0645デフォルトの名無しさん
2007/12/17(月) 04:57:57w
0646デフォルトの名無しさん
2007/12/17(月) 11:54:52その値が指すアドレス(とその前後アドレス)にどんな値が入ってるのか
見せた方が分かりやすいと思う。
0647デフォルトの名無しさん
2007/12/17(月) 12:32:54ポインタの実際の値がいくつなんて、
どうでもよいことじゃね?
0648デフォルトの名無しさん
2007/12/17(月) 17:17:0532bitの処理系なら型に限らず全部4だし
0649デフォルトの名無しさん
2007/12/17(月) 18:12:01いや、そういう正体のつかめ無さが、初心者には分かりづらいんじゃない?
まずは抽象度を下げて、具体例から入った方がいい。
0650デフォルトの名無しさん
2007/12/17(月) 21:20:39ただそんなことに頼っていると書いているコードがしばらくたって
使おうと思うと動かなくなる。
0651デフォルトの名無しさん
2007/12/17(月) 23:40:06for (int i = 0; dst[i] = src[i]; i++);
がポインタのおかげで
for (; *dst++ = *src++;);
できるだけだ
0652デフォルトの名無しさん
2007/12/17(月) 23:59:440653デフォルトの名無しさん
2007/12/18(火) 02:16:140654デフォルトの名無しさん
2007/12/18(火) 02:48:130655デフォルトの名無しさん
2007/12/18(火) 03:51:260656デフォルトの名無しさん
2007/12/18(火) 09:50:060657デフォルトの名無しさん
2007/12/18(火) 18:39:02自己参照型構造体使ってないのか?素人さん?
0658デフォルトの名無しさん
2007/12/18(火) 20:34:350659デフォルトの名無しさん
2007/12/18(火) 20:48:280660デフォルトの名無しさん
2007/12/18(火) 23:03:10グローバルオブジェクトはポインタだけ定義しといて、初期化関数で順番に
newしていくとか。
(順序が重要なオブジェクトをグローバルにすることの是非は置いといて)
0661デフォルトの名無しさん
2007/12/19(水) 01:03:25オブジェクトいろいろ弄る時に使うよ。入れ替えたりとか便利。
0662デフォルトの名無しさん
2007/12/19(水) 01:33:28longjumpするのにも使う
0663デフォルトの名無しさん
2007/12/19(水) 01:43:570664デフォルトの名無しさん
2007/12/19(水) 01:51:40データ格納するならデータベース使わね?
組み込みなら、一時的な(親機に渡す日次処理で消えてしまうよな)データの格納に使ったりするけど
今は組み込みもDBの採用が進んでるし
0665デフォルトの名無しさん
2007/12/19(水) 01:55:290666デフォルトの名無しさん
2007/12/19(水) 02:02:540667デフォルトの名無しさん
2007/12/19(水) 02:37:02ここを見ればおkていうサイトとかありませんか?
0668デフォルトの名無しさん
2007/12/19(水) 08:24:160669デフォルトの名無しさん
2007/12/19(水) 10:32:470670デフォルトの名無しさん
2007/12/19(水) 10:48:42自分を指してる一つ前の構造体のアドレスってどうやって取得するの?
元々そういう風に構造体を作らなきゃダメ?↓みたいな感じで。
typedef struct tree {
struct tree *prev;
struct tree *next;
int x;
} tree_t;
0671デフォルトの名無しさん
2007/12/19(水) 10:51:290672デフォルトの名無しさん
2007/12/19(水) 10:59:19tree->nextをNULLにする.ポインタ最初に戻してまた上から見るみたいなことやってたw
双方向だとその辺ずいぶん速くなるよね.
0673デフォルトの名無しさん
2007/12/19(水) 11:32:57再帰すればいいじゃん。
0674デフォルトの名無しさん
2007/12/19(水) 11:44:48うん,いまは順方向だけの場合そうやってる.
順j方向リストの場合サーチかけてるポインタじゃなくて
その次に対して操作すると一つ前のアドレスはサーチかけてる
ポインタそのものになるということをいいたかった.
0676デフォルトの名無しさん
2007/12/19(水) 13:35:02あるノードを消す場合は、その後ろのノードを消すノードに上書きして、
後ろのノードをfreeするんだよ。
0677デフォルトの名無しさん
2007/12/19(水) 17:35:31消すノードの前のノードと後ろのノードを繋げてから
対象ノードをfreeすればいいんじゃないの
0678676
2007/12/19(水) 17:39:23ごめんなさい
0679デフォルトの名無しさん
2007/12/19(水) 17:39:55ごめんねごめんねごめんね
0680デフォルトの名無しさん
2007/12/19(水) 17:56:32許すからキニシナイ。
真面目な話、あるノードを消したければ後ろのノードの内容を上書きして後ろの方の
ノードを消すなんてのは一方向線形リストを扱う時の基本的なアルゴリズムだよ。
先頭からまた検索するなんて、無駄無駄無駄〜!
じゃ、あるノードの前に新しいノードを追加する時はどうすれば無駄がないか
考えてみそ。
0681デフォルトの名無しさん
2007/12/19(水) 19:19:590682デフォルトの名無しさん
2007/12/19(水) 19:57:24void hoge(int array[][SIZE])見たいな書き方ができないときは
void hoge(int* array[])か
void hoge(int** array)で書くしかない?
0683デフォルトの名無しさん
2007/12/19(水) 20:00:190684デフォルトの名無しさん
2007/12/19(水) 20:19:360685デフォルトの名無しさん
2007/12/19(水) 20:22:040686デフォルトの名無しさん
2007/12/19(水) 20:26:190687デフォルトの名無しさん
2007/12/19(水) 20:30:01また、ポインタと配列がゴチャゴチャになってしまって分からないヤツがきたな
0688デフォルトの名無しさん
2007/12/19(水) 20:30:380689デフォルトの名無しさん
2007/12/19(水) 20:31:150690デフォルトの名無しさん
2007/12/19(水) 20:40:50後は、渡されたほうの関数の中で好きにすれば、
なんでもOKだ
0691682
2007/12/19(水) 20:46:15int sum=0;
for(int i=0;i<i_size;i++)
for(int j=0;j<j_size;j++)
sum+=array[i][j];
return sum;
}
a[3][4],b[10][20]が宣言されてたとして、
上の関数ならsum(a,3,4)もsum(b,10,20)も実行できるけど
*じゃなくて[]を使おうとすると大きさ分からなくて困るじゃん…
と書こうとしたんだが、静的配列じゃ動かないのなこれ。
いろいろ勘違いしてたすまん。
0692デフォルトの名無しさん
2007/12/19(水) 20:49:02それを関数に渡せばいいだけだと思うが。
要素数を教えないで、どうやって終端を認識するの?
0693デフォルトの名無しさん
2007/12/19(水) 20:58:44{
/* ごにょごにょ */
}
int main(void)
{
int **ary;
int m, n, i;
/* m, nに配列長を代入 */
ary = malloc(m * sizeof(int *));
for (i = 0; i < m; i++)
ary[i] = malloc(n * sizeof(int));
return 0;
}
こういうことじゃないの?
0694デフォルトの名無しさん
2007/12/19(水) 22:23:32では無く、むしろ
配列はポインタで処理される
と考えるんだ
0695デフォルトの名無しさん
2007/12/20(木) 00:33:270696デフォルトの名無しさん
2007/12/20(木) 20:29:520697デフォルトの名無しさん
2007/12/20(木) 20:36:390698デフォルトの名無しさん
2007/12/21(金) 04:26:47アセンブラしてたからかな?すぐ理解できた。
0699デフォルトの名無しさん
2007/12/21(金) 09:21:280700デフォルトの名無しさん
2007/12/21(金) 12:01:32よけいわけわからなくなっちゃったような奴なら
じゃあアセンブラからやろうと思うんじゃないか
0701デフォルトの名無しさん
2007/12/21(金) 14:13:17最長でも1日悩み抜けば覚えられるレベル
厄介なのは、すぐ意気消沈してしまう性格
0702デフォルトの名無しさん
2007/12/22(土) 03:07:15をポインタのポインタなどと訳する事で余計に初心者の理解を妨げてるように感じる。
0703デフォルトの名無しさん
2007/12/22(土) 03:11:390704デフォルトの名無しさん
2007/12/22(土) 03:29:180705デフォルトの名無しさん
2007/12/22(土) 03:34:150706デフォルトの名無しさん
2007/12/22(土) 11:26:22「の」は適切じゃないかもな
0708デフォルトの名無しさん
2007/12/22(土) 11:35:30わけわからん
0709デフォルトの名無しさん
2007/12/22(土) 12:45:550710デフォルトの名無しさん
2007/12/22(土) 13:05:502こ仲良くていいじゃん
0711デフォルトの名無しさん
2007/12/22(土) 13:36:43px = &x;
ppx = &px;
printf("%d %d %d", x *px, **px);
0712デフォルトの名無しさん
2007/12/22(土) 13:54:03いいたいことは判るが
> printf("%d %d %d", x *px, **px);
printf("%d %d %d", x, *px, **ppx);
0713デフォルトの名無しさん
2007/12/22(土) 14:32:04100の言葉をもって、最初から最後まで全てを語りつくさないと理解できないのか?
0714デフォルトの名無しさん
2007/12/22(土) 15:04:330715デフォルトの名無しさん
2007/12/22(土) 15:10:02言葉がわかりにくいんじゃないんだよ
0716デフォルトの名無しさん
2007/12/22(土) 15:10:08http://www.google.co.jp/search?hl=ja&q=%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF
ポインタへのポインタ の検索結果 約 2,600 件中 1 - 10 件目 (0.21 秒)
http://www.google.co.jp/search?hl=ja&q=%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%B8%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF
ダブルポインタ の検索結果 約 2,430 件中 1 - 10 件目 (0.21 秒)
http://www.google.co.jp/search?hl=ja&q=%E3%83%80%E3%83%96%E3%83%AB%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF
0717デフォルトの名無しさん
2007/12/22(土) 16:15:03を「charのポインタ」って言うんだから、
void **pp;
を「ポインタのポインタ」って言ってもいいじゃないか。
0718デフォルトの名無しさん
2007/12/22(土) 16:20:440719デフォルトの名無しさん
2007/12/22(土) 16:23:480720デフォルトの名無しさん
2007/12/22(土) 16:25:29ポインタ=何かを指す=指向性のあるもの。よって、
char *cp は「char型へのポインタ」
void **pp は「void型へのポインタへのポインタ」
0721デフォルトの名無しさん
2007/12/22(土) 16:27:030722デフォルトの名無しさん
2007/12/22(土) 16:28:10それでもいいけどね、「へ」は無くてもいいんだよ。
0723デフォルトの名無しさん
2007/12/22(土) 16:35:02型は指してないんじゃね?
0724デフォルトの名無しさん
2007/12/22(土) 16:43:12「〜のポインタ」とか「関数ポインタ」とかじゃなくて
「〜へのポインタ」って言ってる
0725デフォルトの名無しさん
2007/12/22(土) 16:48:160726デフォルトの名無しさん
2007/12/22(土) 16:48:18「〜のポインタ」だけだと意味が通じない。
…ということを言いたかった。
0727デフォルトの名無しさん
2007/12/22(土) 16:48:590728デフォルトの名無しさん
2007/12/22(土) 16:53:220729デフォルトの名無しさん
2007/12/22(土) 17:32:03既に理解してる人にはどっちでもいい。
0730デフォルトの名無しさん
2007/12/22(土) 17:38:550731デフォルトの名無しさん
2007/12/22(土) 17:56:14char ****cpppはなんていうの?
0732デフォルトの名無しさん
2007/12/22(土) 19:01:120733デフォルトの名無しさん
2007/12/22(土) 19:53:13/ ―\ ┏┛
/ノ (●)\ ・
. | (●) ⌒)\
. | (__ノ ̄ |
\ /
\ _ノ
/´ `\
| |
| |
___ ━┓
/ ― \ ┏┛
/ (●) \ヽ ・
/ (⌒ (●) /
/  ̄ヽ__) /
. /´ ___/
| \
| |
0734デフォルトの名無しさん
2007/12/22(土) 20:38:120735デフォルトの名無しさん
2007/12/22(土) 22:39:37void ***pppやchar ****cpppなんて使う機会ない
0736デフォルトの名無しさん
2007/12/23(日) 02:26:02の の
も
へ
0737デフォルトの名無しさん
2007/12/23(日) 04:23:45初心者がそんなもの使うかアホ
極論に持って行こうとするなよボケ
0738デフォルトの名無しさん
2007/12/23(日) 13:59:370739デフォルトの名無しさん
2007/12/23(日) 14:23:100740デフォルトの名無しさん
2007/12/23(日) 14:23:330741デフォルトの名無しさん
2007/12/25(火) 02:33:11ふつうtypedefにするかstructにいれる。
0742デフォルトの名無しさん
2007/12/25(火) 09:29:32**を渡した方が自然な場合もある。
0743デフォルトの名無しさん
2007/12/25(火) 13:07:010744デフォルトの名無しさん
2007/12/25(火) 14:07:430745デフォルトの名無しさん
2007/12/25(火) 17:19:370746デフォルトの名無しさん
2007/12/25(火) 17:22:220747デフォルトの名無しさん
2007/12/25(火) 20:46:280748デフォルトの名無しさん
2007/12/25(火) 21:01:540749デフォルトの名無しさん
2007/12/25(火) 22:06:00あのjunkyのおっさんですか?
0750デフォルトの名無しさん
2007/12/26(水) 00:05:430751デフォルトの名無しさん
2007/12/26(水) 00:39:040752デフォルトの名無しさん
2007/12/26(水) 00:40:280753デフォルトの名無しさん
2007/12/26(水) 02:17:220754デフォルトの名無しさん
2007/12/26(水) 02:42:060755デフォルトの名無しさん
2007/12/26(水) 02:46:150756デフォルトの名無しさん
2007/12/26(水) 02:46:48イテレータは反復子と訳されるのに
0757デフォルトの名無しさん
2007/12/26(水) 02:55:560758デフォルトの名無しさん
2007/12/26(水) 19:59:170759デフォルトの名無しさん
2007/12/27(木) 03:35:430760デフォルトの名無しさん
2007/12/27(木) 05:40:440761デフォルトの名無しさん
2007/12/27(木) 07:59:200762デフォルトの名無しさん
2007/12/27(木) 13:16:11コンピュータ用語のほうは「ポ↑イ↑ン↓タ↓ー↓」
0763デフォルトの名無しさん
2007/12/27(木) 14:43:310764デフォルトの名無しさん
2007/12/27(木) 16:35:250765デフォルトの名無しさん
2007/12/27(木) 18:19:45int* ip
ptr<int> ip
1番目より2番目の方が、2番目より3番目の方がわかりやすいと思うんだけどどうよ。
0766デフォルトの名無しさん
2007/12/27(木) 18:26:250767デフォルトの名無しさん
2007/12/27(木) 18:42:590768デフォルトの名無しさん
2007/12/27(木) 19:10:47Cだと表現しようがないんだけど。
0769デフォルトの名無しさん
2007/12/27(木) 19:54:560770デフォルトの名無しさん
2007/12/27(木) 20:27:21typedef int* intptr;
とでもしやがれってんだ。
こんな事してるソース見たことはないが
でもwin32apiのソース読むと
typedefしまくりで、あんぐりする。
0771デフォルトの名無しさん
2007/12/27(木) 20:54:560772デフォルトの名無しさん
2007/12/27(木) 21:47:44これと>>771が等価ってのはひどい。
0773デフォルトの名無しさん
2007/12/27(木) 21:47:47ハンドル…。
0774デフォルトの名無しさん
2007/12/28(金) 06:51:30昔のMac以外にそういう呼び方をする流儀ってあるのか
0775デフォルトの名無しさん
2007/12/28(金) 07:22:09別に流儀じゃなくて、一つのメモリ管理モデルとしてあるわけで。
(MacOSに影響受けているから当然と言えば当然だけど)PalmOSでもハンドルで管理していたし。
0776デフォルトの名無しさん
2007/12/29(土) 12:23:490777デフォルトの名無しさん
2007/12/29(土) 13:04:320778デフォルトの名無しさん
2007/12/29(土) 16:26:010779デフォルトの名無しさん
2008/01/05(土) 06:19:59クラスの変数の初期化が面倒だからmemset(this,NULL,sizeof(*this))でうっかりvirtualを含むクラスを初期化してしまうと実行時エラーにw
0780デフォルトの名無しさん
2008/01/05(土) 10:19:270781デフォルトの名無しさん
2008/01/09(水) 01:12:26そういう用途にはmemset使うなってエロイ人が言ってたよ。
0782デフォルトの名無しさん
2008/01/09(水) 19:58:200783デフォルトの名無しさん
2008/01/09(水) 20:01:49>memset(this,NULL,sizeof(*this))
ここでNULL使うのはおかしくね?
0784デフォルトの名無しさん
2008/01/09(水) 22:14:450785デフォルトの名無しさん
2008/01/09(水) 22:47:58>局所変数、特に集成体を宣言した後、実際に必要かどうかに関わらず、必ず memset でゼロクリアする人は大勢います。
>しかし、そんなコードを見かけたら、それを書いた人のコードはすべて疑ってかかった方がよいかもしれません。
0786デフォルトの名無しさん
2008/01/09(水) 22:55:340787デフォルトの名無しさん
2008/01/09(水) 23:03:410788デフォルトの名無しさん
2008/01/09(水) 23:09:05って書いてある
0789デフォルトの名無しさん
2008/01/09(水) 23:10:03でもそんなことは関係なしにmemsetそのものは危険じゃないよ。
0790デフォルトの名無しさん
2008/01/09(水) 23:12:300791デフォルトの名無しさん
2008/01/09(水) 23:17:06memset(&a, 0x00, sizeof(struct A));
もう馬鹿かとw
こんな後に
if( a.hoge != NULL)
とかやってる奴ちょっと来い
ぬっこしてやるから
0792デフォルトの名無しさん
2008/01/09(水) 23:20:210793デフォルトの名無しさん
2008/01/11(金) 05:16:33struct {
int a;
int b
int c;
} data;
struct data;
data.a = 0;
とやったとき、bとcには何が入っているのか確定してる?
0794デフォルトの名無しさん
2008/01/11(金) 06:47:120795デフォルトの名無しさん
2008/01/11(金) 07:40:39スレ違い。まぁ、そもそもコンパイル通らないだろうからどうでもいいけど。
0796デフォルトの名無しさん
2008/01/11(金) 09:06:04そもそもゼロクリアなんていらねーよ、って話?
0797デフォルトの名無しさん
2008/01/11(金) 10:27:06そもそも NULL == アドレス0 って保証はないわけなんだが
0798デフォルトの名無しさん
2008/01/11(金) 11:20:52メンバにポインタが含まれる構造体の話か。でもそれなら、
struct DATA data[10] = {0};
という書き方も正しい保障は無いということになるよね。どうすりゃいいの?
0799デフォルトの名無しさん
2008/01/11(金) 12:05:180800デフォルトの名無しさん
2008/01/11(金) 12:14:52>>797
0801デフォルトの名無しさん
2008/01/11(金) 13:42:40void *p = 0;
などとしたとき、p はアドレス 0 を指すわけじゃないぞ。
定数 0 は処理系依存のヌルポインタのビットパターンを作り出す。
struct DATA data = {0}; は、構造体 DATA の各メンバを
定数の 0 (ビットパターンが 0 なわけではない) で初期化するから、大丈夫だよ。
0802デフォルトの名無しさん
2008/01/11(金) 18:47:350803デフォルトの名無しさん
2008/01/11(金) 22:09:460804デフォルトの名無しさん
2008/01/11(金) 22:26:200805デフォルトの名無しさん
2008/01/12(土) 00:41:13ガッ
0806デフォルトの名無しさん
2008/01/14(月) 13:46:21一昔前にUNIXで開発してた頃はstructでデータ構造を設計して、
使用時には
memset(&data, 0x00, sizeof(data));
などのように初期化してから使う、というのが常套句だったよ。俺は。
0807デフォルトの名無しさん
2008/01/14(月) 15:09:53新年特別DQN >>806入りました〜
かわいがってやってください。w
0808806
2008/01/14(月) 17:20:45#define DATAMAX 255
struct {
struct {
int code;
char name[16];
} table[DATAMAX];
} data;
■初期化
memset(&data, 0x00, sizeof(data));
■DB等からセット
for(i=0; i<DATAMAX; i++) {
data.table[i].a = a;
data.table[i].b = b;
}
■取得関数
char empty[16];
char *getName(char *code)
{
for(i=0; i<DATAMAX; i++)
return data.table[i].name;
return empty;
}
■使用
strcpy(name, getName(code));
0809806
2008/01/14(月) 17:21:05かなりはしょってるが、上のレスのようにやってた。
DQN?俺がDQN?
他人に頼らず、テメーだけの力で批判でも何でもしてみろや。
他力本願な口だけ野郎。
0810デフォルトの名無しさん
2008/01/14(月) 17:35:520811デフォルトの名無しさん
2008/01/14(月) 17:53:10他人の権勢に頼って威張るザコのたとえ
0812デフォルトの名無しさん
2008/01/14(月) 18:12:21本当にそんな汎用性のないキモイおもちゃ作り
ずっとやってたの?w
取得関数とかクエリ合わせてチューニングも
選択もできねーしこんな設計じゃ拡張性もない
ゴミすぎるだろw?
0813デフォルトの名無しさん
2008/01/14(月) 18:24:30WindowsAPIのほとんどは今もそうだね
0814デフォルトの名無しさん
2008/01/14(月) 18:46:28DQNかどうかは兎も角、>808を書いている時点でお郷が知れている。
0815デフォルトの名無しさん
2008/01/14(月) 18:53:08そんな臭いがプンプンしたしなぁ
反論してみ?
0816デフォルトの名無しさん
2008/01/14(月) 18:58:260817デフォルトの名無しさん
2008/01/14(月) 18:59:350818デフォルトの名無しさん
2008/01/15(火) 00:06:550819デフォルトの名無しさん
2008/01/15(火) 00:23:30OSS宗教様達は多いよ
リーなんちゃらという変態指導者の
影響だろうけど
自分達の受け入れたくないコード=グロ
って定義だし。
0820デフォルトの名無しさん
2008/01/15(火) 00:35:040821デフォルトの名無しさん
2008/01/15(火) 01:31:100822デフォルトの名無しさん
2008/01/15(火) 07:03:52こっそりやってるなら、どうせわからないからいいけど、
堂々と自慢されると、やっぱりな、あれだよ・・・
0823796
2008/01/15(火) 09:15:500824デフォルトの名無しさん
2008/01/15(火) 10:40:09環境依存でもよくて、標準の真っ当なコードに較べれば多少は速いかもしれないコードを使いたくて、
Intrinsicが用意されていないか使えなくて、インラインアセンブラが用意されていないか使えなくて、
他の手段が見つからないか、過去の遺物を使う為に必要。
0825デフォルトの名無しさん
2008/01/15(火) 12:05:510826808
2008/01/15(火) 14:26:44かなりはしょってて共通の関数なんかをすべて省いてるから>>812の感想はもっともだけど、
実際の事務処理アプリの現場ではその「キモイおもちゃ作り」とやらが蔓延していたのもまた
事実としてあるんだから、自分だけ高みから見下して一蹴してしまうすような>>812は、俺には
少し世間知らずに見えてしまうな。
>>815
「やっぱり」ってなんだ?
テメーで反論せずに誰かに反論してもらって「やっぱり」って思ったの?
まさに>>811に出てる「虎の威を借る狐」=ザコだなお前。
あと「反論してみ?」って見下してるけど、テメーは何も言ってないよねw
なんなんだお前は〜w
0827デフォルトの名無しさん
2008/01/15(火) 14:27:450828808
2008/01/15(火) 14:31:40その他はザコばっかだね。しかも性格が悪すぎ。
>>806に対しての>>807は何だ。
知識も経験もないけど一方的に悪口言ってストレス解消ですか?
反論したいならテメーでしろ。
できないなら実のある話しろやボケ。
だから過疎るんだよこの板。
0829デフォルトの名無しさん
2008/01/15(火) 14:33:000830デフォルトの名無しさん
2008/01/15(火) 15:49:25高血圧は万病の元だよ。
まじで心配
0831デフォルトの名無しさん
2008/01/15(火) 17:50:03で、ちみはポインタの何がわからなくて躓いてるんだ?
0832デフォルトの名無しさん
2008/01/15(火) 18:12:130833デフォルトの名無しさん
2008/01/15(火) 18:19:100834デフォルトの名無しさん
2008/01/15(火) 19:26:38ゆとりって言葉は嫌いだけどつい使ってしまいそうな程
0835デフォルトの名無しさん
2008/01/15(火) 19:31:550836デフォルトの名無しさん
2008/01/15(火) 19:48:200837デフォルトの名無しさん
2008/01/15(火) 19:51:280838デフォルトの名無しさん
2008/01/15(火) 21:15:09浮動小数点数やポインタの内部表現が環境依存であるから
0.0やNULLに初期化されるとは限らないということだけ?
0839デフォルトの名無しさん
2008/01/15(火) 22:02:23つか, memset なんて組み込みやるときの bss の初期化にしか使った事ねぇし…
0840デフォルトの名無しさん
2008/01/16(水) 12:36:150841デフォルトの名無しさん
2008/01/16(水) 13:14:030842デフォルトの名無しさん
2008/01/16(水) 13:51:46m9(・∀・)自作自演だろ!!
違うかな?
たぶん>>816-817と同一人物と見た。もしこの推測が合っていたら、
おまいは姑息で卑怯なこざかしい人ですね
0843デフォルトの名無しさん
2008/01/16(水) 14:04:590844デフォルトの名無しさん
2008/01/16(水) 14:44:02他は違います
0845デフォルトの名無しさん
2008/01/16(水) 15:18:020846デフォルトの名無しさん
2008/01/17(木) 09:28:36, - ' _,´ --──‐- )
,イ´__-___,. -‐ '__,. - '´
`ー----, - ' ´ ̄ `` 、__
__,ィ ヽ. `ヽ.
, '⌒Y / 、ヽ ヽ ヽ.
/ / i /l/|_ハ li l i li ハ
. // 〃 /l i|j_,.//‐'/ lTト l、l j N i |
{イ l / l li //___ リ_lノ lル' lハ. ソ ___◎_r‐ロユ
i| /レ/l l l v'´ ̄ , ´ ̄`イ !| ll,ハ └─‐┐ナ┐┌┘ _ ヘ____
ハ| ll∧ハヽ ト、 '''' r==┐ '''' /l jハ| ll ll /./┌┘└┬┘└┼────┘ロコ┌i
〃 ‖ レ'¨´ヽiへ. _ 、__,ノ ,.イ/|/ ノ ll l| </  ̄L.l ̄ ̄L.lL.! ┌┘|
ll ll { ⌒ヽ_/ } ー‐<.__ ′ l| ‖
‖ ‖ ヽ, /、 〈 |:::::::| `ヽ ‖
‖ {. ハ ヽ Y`‐┴、::::v l ‖
‖ |iヽ{ ヽ_ゾノ‐一’::::ヽ. | ‖
‖ |i:::::`¨´-- :::......:...:.:.::.}| ‖
‖ |i::::::ヽ._:::_:::::::::::::::::::_ノ | ‖
‖ |i::::::::::::i___:::::::::::/ |
jj::::::::r┴-- `ー‐ '⌒ |
〃:::::::マ二 _,ノ
//::::::::::::i ー 一 '´ ̄::.
,','::::::::::::::i::::::::::::::::::::::i::::::ヽ
0847デフォルトの名無しさん
2008/01/18(金) 13:58:420848デフォルトの名無しさん
2008/01/18(金) 16:55:30まぁ、ようは、どんな関数でも使う奴しだいだろ
0849デフォルトの名無しさん
2008/01/18(金) 22:05:01zlibみたいなライブラリではそうする価値があるかもしれないが、俺が書くようなコードではどうでもいい…
0850デフォルトの名無しさん
2008/01/18(金) 22:27:36スピード命のコードだと, 内周ループで数エントリの構造体を
memset するのってやたらコストがでかい。
実際には、サブルーチンコールのオーバーヘッドがでかいんだが…
去年 MPEG 関連の仕事を途中から引き継いだんだけど、とろくって
使い物にならなかった元のコードの memset を代入文に変えただけ
で実行時間 60% 程度まで短くなった。
0851デフォルトの名無しさん
2008/01/18(金) 22:35:040852デフォルトの名無しさん
2008/01/18(金) 22:35:30memset初期化を使うのは、システム起動時か、再起動時でしょ。
あとはオブジェクトが生成されたときとか。
頻繁に生成、破棄を繰り返すようなオブジェクトで、システム上重要な
パフォーマンスに影響をあたえるものにたいして、memset初期化をするかしないか
というのは「高速化」の話。memset初期化のよしあしの話ではない。
0853デフォルトの名無しさん
2008/01/18(金) 22:35:42まぁそれはまた別の話かと
0854デフォルトの名無しさん
2008/01/18(金) 22:54:00それは言えてるんだが、組み込み物ではコンパイラの選択肢は限られる。
ましてや、クライアント指定のコンパイラだ
>>852
> システム上重要なパフォーマンスに影響をあたえるもの
に、対して memset で初期化しておいて、直後にその大半を意味のある
値で再度上書きしてた。
> よしあしの話ではない。
かもしれないが、元のコードを書いた奴の神経をうたがったわな。
0855デフォルトの名無しさん
2008/01/18(金) 22:57:38常に全部を使うわけでもなく、
0で埋められる項目の頻度が高ければ十分ありだろ。
C/C++以外では今時クラスインスタンス0フィルされる言語も珍しくもないし。
ケースを指定するでもなく一般論としてあーだこーだいってる奴はアフォ。
0856デフォルトの名無しさん
2008/01/18(金) 23:11:50いいえ。
高が、struct someStruct foo = {0} で済むことのためにmemset()を使う必然性は殆どありませんね。
それがstruct someStruct * foo = malloc(sizeof(* foo))した領域でも同じこと。
0857デフォルトの名無しさん
2008/01/18(金) 23:29:25struct someStruct * foo
何か処理
foo = {0};って感じでまた初期化すればいいだけ
memset使うやつは馬鹿今の公開されている
まともなソースでmemset使ってるのコードは皆無だぞ?
0858デフォルトの名無しさん
2008/01/18(金) 23:31:27>foo = {0};
それ無理じゃね
0859デフォルトの名無しさん
2008/01/18(金) 23:38:010860デフォルトの名無しさん
2008/01/18(金) 23:38:590861デフォルトの名無しさん
2008/01/18(金) 23:50:15宣言と同時に初期化しない場合はどうするの?
というよりこれってコンパイラ依存なんじゃないの?
0862デフォルトの名無しさん
2008/01/18(金) 23:51:49manとかMSDNに記述あるんだな
0863デフォルトの名無しさん
2008/01/18(金) 23:54:46具体的に書いてくれ。調べるの面倒
0864デフォルトの名無しさん
2008/01/18(金) 23:55:370865デフォルトの名無しさん
2008/01/19(土) 00:05:01>説明
>memset() は s で示されるメモリ領域の先頭から n バイトを c で埋める。
>返り値
>memset() は s へのポインタを返す。
>準拠
>SVr4, 4.3BSD, C89, C99, POSIX.1-2001.
俺の目がおかしいのかもしれないが危険性がどこにもみつけられない。
MSDNとか読むきしないから他のヤツよろしく。
0866デフォルトの名無しさん
2008/01/19(土) 00:09:13これは嘘だろw
nバイトをcで埋める可能性もあるが正解
0867デフォルトの名無しさん
2008/01/19(土) 00:10:50日本語でおk
0868デフォルトの名無しさん
2008/01/19(土) 00:13:06冬 真 っ 盛 り
0869デフォルトの名無しさん
2008/01/19(土) 00:15:43まぁSEGVるかもしれんが
0870デフォルトの名無しさん
2008/01/19(土) 00:18:25>まぁSEGVるかもしれんが
>>866がそんなことで「埋めない可能性がある」とかバカなこというわけないじゃないか。
>>866は、きっともっと違った根拠があっていってるのだよ。
0871デフォルトの名無しさん
2008/01/19(土) 00:19:580872デフォルトの名無しさん
2008/01/19(土) 00:27:17ワロスwww
その「可能性」言い出したら、マニュアルなんて書けない気がするがwww
0873デフォルトの名無しさん
2008/01/19(土) 00:28:460874デフォルトの名無しさん
2008/01/19(土) 00:35:45こんなに釣れた
0875デフォルトの名無しさん
2008/01/19(土) 00:40:41トイウコトニシタイノデスネ
0876デフォルトの名無しさん
2008/01/19(土) 12:18:16これはできるけど、動的確保した構造体だと無理じゃね?
0877デフォルトの名無しさん
2008/01/19(土) 12:21:34C99は可能
お前あほ杉w
0878デフォルトの名無しさん
2008/01/19(土) 14:00:41struct someStruct * foo = malloc(sizeof(* foo));
struct someStruct blank = {0};
* foo = blank;
よほど気の利かないコンパイラでもなければ、blankの実態は作られない。
0879デフォルトの名無しさん
2008/01/19(土) 14:06:250880デフォルトの名無しさん
2008/01/19(土) 14:14:39こんなコンパイラがサポートしている「かもしれない」機能を
「使わないのはおかしい」と主張されてもな。
0881デフォルトの名無しさん
2008/01/19(土) 14:20:18そうなの?
0882デフォルトの名無しさん
2008/01/19(土) 14:21:52サポートしていないコンパイラをご存知ならご提示くださいませ。
以後規格外品として、広く存在を知らしめてまいりたいと思いますので。
0883デフォルトの名無しさん
2008/01/19(土) 14:22:15そうだよ
0884デフォルトの名無しさん
2008/01/19(土) 14:23:16むかし使ってた、ARMの純正コンパイラではサポートされてなかったな。
0885デフォルトの名無しさん
2008/01/19(土) 14:23:35組み込み業界じゃザラにあるが…
0886デフォルトの名無しさん
2008/01/19(土) 14:24:520887デフォルトの名無しさん
2008/01/19(土) 14:26:150888デフォルトの名無しさん
2008/01/19(土) 14:26:47つか、>>882 は「Cが処理系に依存しない高級言語だ」って
思ってる可愛そうな奴なんだよ
0889デフォルトの名無しさん
2008/01/19(土) 14:28:01いや、全部のメンバに代入すればOK
struct A {
int a;
int b;
};
OK:struct A a = {0, 0};
NG:struct A a = {0};
0890デフォルトの名無しさん
2008/01/19(土) 15:42:06スレタイが読めるようになったらまた来い
0891デフォルトの名無しさん
2008/01/19(土) 19:37:520892デフォルトの名無しさん
2008/01/19(土) 21:53:400893デフォルトの名無しさん
2008/01/20(日) 01:38:560894デフォルトの名無しさん
2008/01/20(日) 20:51:060895デフォルトの名無しさん
2008/01/20(日) 22:18:11巨大な行列を持つ構造体を初期化するとか普通に代入でまかなうとマジで馬鹿にならないくらいソースが膨らむから
ループで回して初期化するのも遅いしな
0896デフォルトの名無しさん
2008/01/21(月) 00:52:45http://mori.eco.to/
0897デフォルトの名無しさん
2008/01/21(月) 01:23:47どうでもいいのだが・・・
>当然ですが、あらゆる標準関数の使用を認めません。
>
>・strlen() を自作せよ。
>・strcat() を自作せよ。
標準関数の使用を認めないくらいなら、strlenとかstrcatとかキケンな
関数じゃなくて、ふつうはもっと安全な代替関数を自作するでしょ。
0898デフォルトの名無しさん
2008/01/21(月) 02:16:15>C++未経験ながら、1人でC++の10万行のソースコードの保守及び、3万行の開発を行った。
これ単にCとして使ったとかじゃ
0899デフォルトの名無しさん
2008/01/21(月) 02:38:15クラス数と各クラスのメソッド数で競ってくれ
っつーかすれ違いか
0900デフォルトの名無しさん
2008/01/21(月) 02:57:110901デフォルトの名無しさん
2008/01/21(月) 05:07:320902デフォルトの名無しさん
2008/01/21(月) 11:28:410903デフォルトの名無しさん
2008/01/21(月) 17:02:57ポインタは理解出来るんじゃね? 余計に混乱するかな?
0904デフォルトの名無しさん
2008/01/21(月) 18:50:370905デフォルトの名無しさん
2008/01/21(月) 19:33:40AVRとかHC08とかARMがいいんじゃね?
あと、アセンブラのアドレスはせいぜい指してる先のバイト数
の情報くらいしか持ってないから、ポインタまでには、まだまだ
壁があるのでよろしく。
0906デフォルトの名無しさん
2008/01/21(月) 20:47:32おれは構造体を定義したら、必ずその初期化関数を作るけどな。
だからソースはさほど膨らまない。
まあその関数の中でmemsetをやっている場合もあるんだが、
それでも素のmemsetは使わないな。
0907デフォルトの名無しさん
2008/01/21(月) 21:43:28最悪5千近くなる行列は動的に変わるんで代入じゃ無理だし、ループでまわして初期化するよりはmemset使った方が速度は確保できるし
何が糞なんだかなぁと思うわw
まあ、動的に確保して中身をゼロクリアしたいのならcalloc使えって話だけどなw
しかし、途中で初期化したくなったらmemsetかな?
0908デフォルトの名無しさん
2008/01/21(月) 22:09:00> あと、アセンブラのアドレスはせいぜい指してる先のバイト数
> の情報くらいしか持ってないから
TRON chip を否定したな!WwwWW
0909デフォルトの名無しさん
2008/01/21(月) 22:47:17> TRON chip を否定したな!WwwWW
は? TRON Chipのポインタも、持ってる情報はアドレスだけですが?
ポインタに情報を持たせるのはLisp処理系とかで、ワードアラインの都合で
使わない下2bitに型の情報を入れ込んだりとか、アドレスが24ビットだった
68000用のやっぱりLisp処理系で上8bitに型の情報を入れたり、とか。
ポインタが本格的に(?)型の情報を持ってるアーキテクチャったらIBMの
System/38→AS/400とかだろ。
0910デフォルトの名無しさん
2008/01/21(月) 23:12:54ショボいCPU使ってプログラムを作ると自分でポインタを作って管理しなきゃいけなくなるよ。
それでポインタがマスター出来るだろうと思う。
0911デフォルトの名無しさん
2008/01/22(火) 01:11:14そういう0クリアする必要があるときのmemsetには、誰も異論を唱えていない。
0912デフォルトの名無しさん
2008/01/22(火) 01:16:18それやるとどこか1バイトだけ
初期化されず危険というコンパイラもある
0913デフォルトの名無しさん
2008/01/22(火) 01:24:46「そうする機能を持つ」ということと、「バグでその機能が働かない」というのを
ごっちゃにすると、ワケワカンナクなるからやめようぜ。
0914デフォルトの名無しさん
2008/02/11(月) 18:52:45本家本元のLispマシンを忘れてるぞ。
っていうかアドレスの使ってないビットにむりやり型情報詰め込んだりしてんのも
Lispマシンからの処理系移植のために苦肉の策で
はじまった事じゃないか。
0915デフォルトの名無しさん
2008/02/15(金) 22:39:08{
return a[i][j];
}
int test() {
extern int array[3][5];
return aref(array, 0, 0);
}
コンパイル時に
passing argument 1 of 'aref' from incompatible pointer type
って怒られるのはなぜ?
0916デフォルトの名無しさん
2008/02/15(金) 23:15:49エラーメッセージが指摘しているように、関数arefの第一引き数の型が違うから。
0917デフォルトの名無しさん
2008/02/15(金) 23:18:41こうすればおk
int aref(int (*a)[5], int i, int j)
0918デフォルトの名無しさん
2008/02/16(土) 13:44:42つ、ことはですねぇ…
コンパイラは int array[3][5]; を 1 次元の配列と認識してるで ok?
0919デフォルトの名無しさん
2008/02/16(土) 13:53:28int[5] が3つある1次元配列という認識なら、正しい。
0920デフォルトの名無しさん
2008/02/16(土) 14:05:35aref の a に渡す変数は
int i; char a[3][5]; char *ap[3];
for (i = 0; i < 3; ++i)
ap[i] = &a[i];
で, 出来たポインタ配列以外は × って認識で ok?
0921デフォルトの名無しさん
2008/02/16(土) 14:11:18配列の配列をごっちゃにするな
0922デフォルトの名無しさん
2008/02/16(土) 14:13:12bad
0923デフォルトの名無しさん
2008/02/16(土) 14:24:59おまいさんは配列の配列なんぞを使わずに、一次元配列二次元的にアクセスすることを覚えた方がいいよ。
0924デフォルトの名無しさん
2008/02/16(土) 14:53:12以下の3つの違いを明確に理解せよ。
特にメモリ上でどう表現されるかについて考えるといい。
(a) 3つの int[5] からなる配列 int a[3][5]
(b) 3つの int* からなる配列 int* a[3]
(c) int[5] へのポインタ int (*a)[5]
(a) と (b) は似たようにアクセスできるかもしれないが全くの別物。
(a) から (c) に自動変換が効くのは一般の配列の場合と同様。
0925デフォルトの名無しさん
2008/02/16(土) 15:29:16> (c) int[5] へのポインタ int (*a)[5]
なるほど…
ありあがとう, やっと意味がつながりました。
0926デフォルトの名無しさん
2008/05/04(日) 05:23:11空ポインタが0以外の処理系とか存在するのか?
0927デフォルトの名無しさん
2008/05/04(日) 06:55:58http://www.kouno.jp/home/c_faq/c5.html#17
あるけど、内部ビットパターンがそうであるというだけで、
Cのソースコード上は0(がポインタ型にされたとき)がヌルポインタということは常に成り立つ。
0929デフォルトの名無しさん
2008/05/05(月) 20:08:58boolは0だよな
0930デフォルトの名無しさん
2008/05/07(水) 10:19:09いいえ、boolは型です。
0931デフォルトの名無しさん
2008/05/17(土) 23:14:10でもfalseのビットパターンって全0だったっけ。
0932デフォルトの名無しさん
2008/05/24(土) 07:50:35falseのビットパターンは全0で正解。
残念ながらNULL pointerをbool型にキャストした場合にfalse(全0)になる保証はない。
ifやforの条件部にpointer型を使用した際に、それがNULL pointerのときかつそのときのみfalse扱いになるのは別の仕組みによる。(C FAQなどに詳しい説明あり。)
0933デフォルトの名無しさん
2008/06/02(月) 03:43:07http://pc11.2ch.net/test/read.cgi/tech/1212329099/
0934デフォルトの名無しさん
2008/06/11(水) 14:59:18プログラミングのセンスがないやつがプログラミングを続けても
たぶんどこかで脱落する。
少なくとも劣等感にまみれた人生になると思ふ。
0935デフォルトの名無しさん
2008/06/14(土) 10:21:59ポインタなんて考えると、手に負えなくなる。
自分の良く使うアルゴリズムに使うときの
パターンを手コピーしながら覚えるのが
結局は使いこなしにも良い気がする。
定番の型を何度も使っているうちに
やがて脳内に回路が育ってくる、
そういうのでいいんだと思う。
ポインタに限らないけど。
野生のポインタ…
それは ぬるぽ
0936デフォルトの名無しさん
2008/06/14(土) 11:49:280937デフォルトの名無しさん
2008/06/14(土) 19:05:37よくわからなくなるとこが厄介な気がする。
0938デフォルトの名無しさん
2008/06/14(土) 20:53:140939デフォルトの名無しさん
2008/06/14(土) 23:18:550940デフォルトの名無しさん
2008/06/14(土) 23:49:08複雑なデータ構造とか、デバッグとか、そっちじゃないかね
0941デフォルトの名無しさん
2008/06/15(日) 11:26:44「int型のポインタ変数」p って覚えれば割とすんなり覚える。
だから教えるときは int *p; より int* p; で教えてる。
0942デフォルトの名無しさん
2008/06/15(日) 14:10:450943デフォルトの名無しさん
2008/06/15(日) 14:17:230944デフォルトの名無しさん
2008/06/15(日) 15:01:03> int* p, q, r; /* ポインタ変数なのは p だけ */
根本的に発想が違うからややこしい
0945デフォルトの名無しさん
2008/06/15(日) 15:11:44ポインタ初学者向けの記事だとしたらひどい内容だな。
0946デフォルトの名無しさん
2008/06/15(日) 15:23:430947デフォルトの名無しさん
2008/06/15(日) 15:26:16じーっと黙ってるだけなで、向かいの居乳のIさんは、ポインタをおそる
おそるナデナデしてんのか?
0948デフォルトの名無しさん
2008/06/15(日) 15:28:34日本語でOK
0949デフォルトの名無しさん
2008/06/15(日) 15:32:150950デフォルトの名無しさん
2008/06/15(日) 15:33:000951デフォルトの名無しさん
2008/06/15(日) 15:35:000952デフォルトの名無しさん
2008/06/15(日) 21:59:150953デフォルトの名無しさん
2008/06/16(月) 09:12:070954デフォルトの名無しさん
2008/06/24(火) 20:04:030955デフォルトの名無しさん
2008/06/26(木) 21:22:19C++だと配列newとか仮想関数とかあるからな…
0956デフォルトの名無しさん
2008/06/30(月) 02:34:27「構造体をmemsetで初期化してはいけない」という話がこのスレにある
だが実際はそんな特殊な環境はめったに無く、人事だろうと思ってたんだ
0957デフォルトの名無しさん
2008/06/30(月) 02:36:29以下のコードを実行すると、大抵の環境で2回目のassertに失敗する
手元の x86の VC7.1と gcc 3.4で確認したぜ
#include <assert.h>
#include <string.h>
int main()
{
struct A;
struct { int A::*p; } hoge = {0};
assert(!hoge.p); // こちらはOK
memset(&hoge, 0, sizeof(hoge));
assert(!hoge.p); // This assertion fails
}
0958デフォルトの名無しさん
2008/07/05(土) 15:26:030959デフォルトの名無しさん
2008/07/05(土) 20:19:28これは興味深い
0960デフォルトの名無しさん
2008/07/06(日) 04:59:500をNULLに使えないというわけか。
0961デフォルトの名無しさん
2008/07/06(日) 22:11:10#include <stdio.h>
struct A {
char elem1;
char buf1[0x7FFFFFFF];
char buf2[0x7FFFFFFE];
char elem2;
char elem3;
char elem4;
};
union UP { char A::*p; size_t n; };
void test(const UP &x) { printf(" nval=%08x, is_null=%d\n", x.n, (x.p==0)); }
int main()
{
UP hoge;
printf("sizeof UP=%u\n", sizeof(UP));
hoge.p=0; test(hoge);
hoge.p=&A::elem1; test(hoge);
hoge.p=&A::elem2; test(hoge);
hoge.p=&A::elem3; test(hoge);
hoge.p=&A::elem4; test(hoge);
}
0962デフォルトの名無しさん
2008/07/06(日) 22:12:08sizeof UP=4
nval=ffffffff, is_null=1
nval=00000000, is_null=0
nval=fffffffe, is_null=0
nval=ffffffff, is_null=1
nval=00000000, is_null=0
エラーチェック無しの gcc 君でした
0963マイク ◆yrBrqfF1Ew
2008/07/19(土) 07:12:13昔web検索してたらどこかのサイトで見た。
0964デフォルトの名無しさん
2008/07/19(土) 08:16:59プログラムは使用ー>理解が原則
0965デフォルトの名無しさん
2008/07/19(土) 08:53:210966デフォルトの名無しさん
2008/07/19(土) 09:17:52プログラムは使用することで理解する、体験学習が原則。
0967デフォルトの名無しさん
2008/07/19(土) 09:50:52小学校でいうなら台形の公式くらいだろ
0968デフォルトの名無しさん
2008/07/19(土) 11:55:040969デフォルトの名無しさん
2008/07/19(土) 12:34:04その面積は 底辺×高さ=(台形の上底+台形の下底)×高さ だから
その半分で (上底+下底)×高さ÷2 と習うんだよ
>>968は小学校からろくに勉強してない池沼
0970デフォルトの名無しさん
2008/07/19(土) 13:08:270971デフォルトの名無しさん
2008/07/19(土) 13:22:38なんで平行四辺形なんて持ち出す必要あるんだ?
0972デフォルトの名無しさん
2008/07/19(土) 13:31:250973デフォルトの名無しさん
2008/07/19(土) 13:35:320974デフォルトの名無しさん
2008/07/19(土) 13:37:57それだと
(上底×高さ÷2)+(下底×高さ÷2)
という式になるだろ
この式を(変数が入ったまま)まとめるのは面積の計算を習う時点では不可能
0975デフォルトの名無しさん
2008/07/19(土) 13:42:260976デフォルトの名無しさん
2008/07/19(土) 13:47:490977デフォルトの名無しさん
2008/07/19(土) 13:57:56そうやっても面積は求められるねというようなことも
教科書には書いてあった気がする、公式には969で出したけど。
0978デフォルトの名無しさん
2008/07/20(日) 03:51:07なんでだ?面積習う前に、結合法則も分配法則も習ってないのか?
0979デフォルトの名無しさん
2008/07/26(土) 12:05:12int papu = 10;
int *poin = &pupi;
*poin = &papu;//なんでエラーが出るんだよ!
0980デフォルトの名無しさん
2008/07/26(土) 12:22:170981デフォルトの名無しさん
2008/07/26(土) 15:12:290982デフォルトの名無しさん
2008/07/26(土) 17:59:41いっそ static みたいに記述できれば混乱もないだろうに。
pointer int poin; みたいな。
0983デフォルトの名無しさん
2008/07/26(土) 18:02:090984デフォルトの名無しさん
2008/07/27(日) 17:28:32ポインタはどうやって学ぶべきか part2
http://pc11.2ch.net/test/read.cgi/tech/1217147291/
0985デフォルトの名無しさん
2008/07/27(日) 17:56:07/.: : : : : : : .ヽ
R: : : :. : pq: :i}
|:.i} : : : :_{: :.レ′
ノr┴-<」: :j|
/:r仁ニ= ノ:.ノ|! _
/:/ = /: :/ }! |〕) 何だって?
{;ハ__,イ: :f | /´
/ }rヘ ├--r─y/
/ r'‐-| ├-┴〆 _, 、_ '⌒ ☆
仁二ニ_‐-イ | | ∩`ω´)
| l i 厂  ̄ニニ¬ ノ ⊂ノ <<980-981
,ゝ、 \ \ __厂`ヽ (__ ̄) )
/ /\_i⌒ト、_ ノrr- } し'し′
└-' ̄. | |_二二._」」__ノ
0986デフォルトの名無しさん
2008/07/27(日) 17:57:56http://school7.2ch.net/test/read.cgi/lic/1214315947/
155 名前:名無し検定1級さん 投稿日:2008/06/28(土) 21:16:05
おまえ等は険しい雪山を登る登山家だ。
見えるだろ?
B木やらAVL木、二分木がうっそうと生い茂る、危険な沢付近を通行中だ。
0987デフォルトの名無しさん
2008/07/27(日) 18:06:08日本の経済に影響を与えているだろ
平均やら統計やらだと実態を返って見失う好例
話が飛んでるけど、そもそも平均だけで判断しようっていうのが間違い。
平均だけ見たらあくまで平均が分かるだけで、富裕層の人数とかなんて判断できない。
平均だけを見て「統計」とかほざくな。分散とか標準偏差を高校の教科書で見てごらん。
ちゃんと統計結果を総合的に分析すれば実態を見失わないから。
煽りじゃなく忠告。
なんかお前って考えが表面的。
公式を覚えても意味がない。
本質を、根幹を見るようにしたほうがいい。
レス数が950を超えています。1000を超えると書き込みができなくなります。