07/11/11 01:31:28
俺は頭がいいからなんとかなるけど
低収入のオマエラじゃ無理だな
370:デフォルトの名無しさん
07/11/11 01:40:23
>>369
はいはい、掲示板では何とでもいえるさw
371:デフォルトの名無しさん
07/11/11 03:08:02
>>341
実際こう書くこと多いけど何か問題でもあんの?
372:デフォルトの名無しさん
07/11/11 03:10:51
読みにくいってだけじゃないの?
373:デフォルトの名無しさん
07/11/11 03:15:32
>>371,372
まぁ論外だ。論外だということを理解できない君が、プログラマでない
ことを願う。
374:デフォルトの名無しさん
07/11/11 03:31:38
残念
375:デフォルトの名無しさん
07/11/11 05:10:31
>>371-372
おいおい・・・
376:デフォルトの名無しさん
07/11/11 08:08:22
で実際なにがいけないの?
377:デフォルトの名無しさん
07/11/11 09:51:13
何故にポインタが存在するのか。これがわかれば楽勝
378:デフォルトの名無しさん
07/11/11 11:17:01
俺は第一印象で、途中にNULLがあったらどうするんだ?って思ったが。
379:デフォルトの名無しさん
07/11/11 12:34:15
コーディングは暗号解読じゃねえんだ
380:デフォルトの名無しさん
07/11/11 12:51:28
いやぁ、コメントと改行とインデントがちゃんとしてれば
結構普通に読めると思うけど
でもこれはポインタの話とは違くねぇ?
381:デフォルトの名無しさん
07/11/11 12:54:51
>>380
ポインタは普通の構造体に比べてコピーのコストかからないんだから
逐一名前を付け替えたほうが可読性あがるしそっちのほうが良かろう
382:デフォルトの名無しさん
07/11/11 13:10:43
可読性はポインタには限らないじゃないってことを言いたかった
383:デフォルトの名無しさん
07/11/11 13:57:36
英検準2級に落ちたああア
384:デフォルトの名無しさん
07/11/11 14:46:49
>>383
ポインタの問題でつまづいたか?
385:デフォルトの名無しさん
07/11/11 15:48:43
中間ポインタを置いたほうが
読みやすいってことなの?
386:デフォルトの名無しさん
07/11/11 17:00:16
まず中間ポインタって何よ
387:デフォルトの名無しさん
07/11/11 17:59:52
まぁ、C言語だと、短縮した記述とか、複雑なポインタの連鎖をつかって、
「俺、おまえらと違って頭いいんだよ」
と分り難いコードを得意げに自慢げに晒すヤツが
けっこう居る
388:デフォルトの名無しさん
07/11/11 18:00:33
うん
389:デフォルトの名無しさん
07/11/11 18:07:30
頭が良いことは良いことだ
390:デフォルトの名無しさん
07/11/11 19:10:38
>>388,389
ソースコードの読み手が、「このコード大丈夫か?」とか
心配させるようなコード書くようなヤツは頭がいいとは言わない。
ソースコードの読み手が、立ち止まることなく「このコードは
大丈夫」だと確信しながら、スラスラ読めるコードを書くヤツは
頭がいい。
結論としては>>341のようなコードを書くヤツは頭が悪い。
391:デフォルトの名無しさん
07/11/11 19:12:10
たいていの商品は分かりやすさこそ売り物の価値なんだよ。
高齢化社会を迎える日本だと特にそうだ。
戦後の日本文学が、難解であれば崇高だと勘違いして衰退してしまった反省を
ソースコードにおいても生かしてほしいもんだ。
392:デフォルトの名無しさん
07/11/11 19:33:55
同意ではあるんですが
読む人のレベルにもよりませんか?
393:デフォルトの名無しさん
07/11/11 19:37:09
>>390
うん
394:デフォルトの名無しさん
07/11/11 19:52:45
>>392
もちろんプログラマとしての常識は、身につけている
という前提は必要。
常識というのは、言語に関する知識、アルゴリズムに
関する知識、慣用句に関する知識くらいかな。パッと
思いつく限り。
あとは、プログラムが対象としている分野ごとの
知識は前提とするけど。例えば、デコーダのプログラム
のソースコードならば、読み手がそのデコードの
アルゴリズムを知っているという前提をした上で、
プログラムを書くことになる。
395:デフォルトの名無しさん
07/11/11 20:01:26
でも.Net Framework、SQL、XML、WebServices、などなど…。
色々ありすぎて、「言語に関する知識」「アルゴリズムに関する知識」という定義が
やっぱり人それぞれになってしまうと思う。
396:デフォルトの名無しさん
07/11/11 21:04:45
>>395
それはどれも応用プログラミングの専門知識であって常識ではないんじゃないか。
現場の常識という事はあるかもしれないが、それでは一般論とはいえない。
ある範囲で分野を定義した時にその中の最低限の知識というのがあるわけで、
それ以上のテクニックだかノウハウだかを理由も無く濫用するのが良い習慣でないのは
間違いないだろう。
397:デフォルトの名無しさん
07/11/11 21:07:57
つうかそんな基本的なところで俺SUGEEやってないで仕事に集中しろよと
398:デフォルトの名無しさん
07/11/11 23:01:25
べた集中するための遊びだろ。
だいたい1:9ぐらいかな。
399:デフォルトの名無しさん
07/11/12 16:34:54
オ…オ…オレSugeeeee!
…って思うもんさ、プログラマなら…
400:デフォルトの名無しさん
07/11/12 18:32:40
>>341はただのポインタ連結だからいいけどさ、
これがC#のプロパティで同じことやられたりしたら、
もう理解不能だな。
401:デフォルトの名無しさん
07/11/13 17:11:27
char dmoji[36][7][7] = {
{ " ##",
" # #",
" # #",
" #####",
" # #",
"# #"},
{ "##### ",
" # #",
"##### ",
" # #",
" # #",
"######"},
{ " ####",
" ## #",
" # ",
"## ",
" ## #",
" ####"},
。。。略・・・
402:デフォルトの名無しさん
07/11/13 17:13:41
464 名前:仕様書無しさん 投稿日:2007/11/13(火) 16:33:04
SEの兄がいつも独り言で死にたいあー死にたいってよく独り言を言ってます
そんなに仕事は厳しいんですか?
465 名前:仕様書無しさん 投稿日:2007/11/13(火) 16:35:49
動かないものを動きますと言わないといけないからとか?
403:デフォルトの名無しさん
07/11/13 18:16:53
宣言に問題あるよな、
最初からそういうもんだと思ってたからあまり考えなかったけど。
int *p, *q;
じゃなくて
*int p, q;
にすりゃいいんだ。
404:デフォルトの名無しさん
07/11/13 18:18:20
pointer<int> p;
こうだろ
405:デフォルトの名無しさん
07/11/13 18:48:11
>>403
その記法で関数ポインタとポインタを返す関数をどうやって区別する?
406:デフォルトの名無しさん
07/11/13 19:31:17
>>404
実際、C++だとstd::tr1::add_pointer<int>::typeとか
boost::mpl::identity<int*>::typeとか書ける。
::typeとか冗長だけどうまく使えば便利に思うこともある。
407:デフォルトの名無しさん
07/11/13 21:39:21
const int a = 1;
int* p = &a;
ってしたら、*pでaの値を変更できる?
*&a ってした場合は、どう?
408:デフォルトの名無しさん
07/11/13 21:49:06
すいません、上を少し訂正します
const int a = 1;
const int* p = &a;
ってしたら、*pでaの値を変更できる?
*&a ってした場合は、どう?
409:デフォルトの名無しさん
07/11/13 22:10:44
つ const_cast
410:デフォルトの名無しさん
07/11/14 05:54:34
>>408
#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
411:デフォルトの名無しさん
07/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ケ所
412:デフォルトの名無しさん
07/11/14 05:57:54
あ、>>410は間違った
最後は%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
413:デフォルトの名無しさん
07/11/14 09:13:50
>>410
あ、何となくわかってきた。
タイプ
ア
ド データ
レ
ス
アドレス*タイプでデータを指し示すから、*pで、データをアドレス&タイプに変換するから、
&aなんだな。
414:デフォルトの名無しさん
07/11/14 09:17:24
413が何を言ってるのかわからんのだが
415:デフォルトの名無しさん
07/11/14 09:21:59
>>414
「*」や「&」という変な文字を使う理由について推測しただけ。
416:デフォルトの名無しさん
07/11/14 09:45:47
&は変数のアドレスを得る演算子
*はポインタの先にある実体を得る演算子
p = &a;
は変数aのアドレスをポインタpに代入。
*p = 5;
はpに入っているアドレスの先を書き換える処理
というのは理解してるのかな?
417:デフォルトの名無しさん
07/11/14 13:08:50
ポインタ変数を使うからよく分からなくなるのではないか?
longかなんかの変数にポインタを代入して、いろいろやってたら何となく分かって来るよ。きっと。
環境依存だけど。
418:デフォルトの名無しさん
07/11/14 13:47:37
なぜわざわざ・・・
419:デフォルトの名無しさん
07/11/14 17:34:00
それやるくらいだったら、
アセンブリ言語使ってみろというほうがずっと有意義。
420:デフォルトの名無しさん
07/11/14 17:39:28
よくアセンブリ言語薦めるやついるけど、
JavaとかC#とかの高級言語触らせたほうが、どうしてポインタが欲しくなるのかを理解するのにはいいんじゃないか?
421:デフォルトの名無しさん
07/11/14 18:00:35
>>420
JavaとかC#だって、ポインタはあるのだから、欲しくなんてならない。
422:デフォルトの名無しさん
07/11/14 18:01:06
アセンブラなんてしなくてもC++とXbyakで遊べばいいんだよ
423:デフォルトの名無しさん
07/11/14 18:02:49
ポインタや再帰を駆使したアルゴリズムの本ない?
424:デフォルトの名無しさん
07/11/14 18:03:53
Javaにもポインタってあるんですか?
425:デフォルトの名無しさん
07/11/14 18:06:45
>>421
ちげーよ、安全に使えるようになってるから理解しやすいかと思ったんだよ。
426:デフォルトの名無しさん
07/11/14 18:06:59
ポインタと再帰はあんまり関係なくね?
427:デフォルトの名無しさん
07/11/14 18:07:34
>>424
ヒント:ぬるぽ
428:デフォルトの名無しさん
07/11/14 18:08:29
>>424
ポインタは無いよ
429:デフォルトの名無しさん
07/11/14 18:11:19
>>420
アセンブラは良く知らんが同意
>>421
趣味でちょっとしたTCP/IPプロトコルを実装しているんだが
ポインタがないと俺には無理ってぐらいだ
こんなものをC#とかJavaとか他の言語でどうやって書けと(ry
ポインタとmemcpyを使ってソース書くときれいになって読みやすくなってるぞ
430:デフォルトの名無しさん
07/11/14 18:13:31
C#にポインタはあるよ
431:デフォルトの名無しさん
07/11/14 18:15:32
C脳から抜け出せてないのやら他言語に疎いのやら
432:429
07/11/14 18:15:35
>>430
あれは紛い物
433:デフォルトの名無しさん
07/11/14 18:22:26
どういう点が?
434:デフォルトの名無しさん
07/11/14 18:23:12
ポインタだけに点
435:デフォルトの名無しさん
07/11/14 18:29:18
これはいい脱力感
436:デフォルトの名無しさん
07/11/14 18:37:23
わふ?
437:デフォルトの名無しさん
07/11/14 23:10:45
>>432
結局根拠無し?
438:
07/11/16 00:10:00
アセンブラ役にたたんかもしれんが
理解を深めるには結局は近道だと思われ
439:デフォルトの名無しさん
07/11/16 07:30:47
ポインタの理解には、メモリとアドレスについて知れば十分。
インストラクションコードの知識が必要になるのは、もっとずっと後。
440:デフォルトの名無しさん
07/11/16 08:37:13
絶対アドレッシングと相対アドレッシングまで押さえれば完璧
441:デフォルトの名無しさん
07/11/16 09:11:57
//
442:デフォルトの名無しさん
07/11/16 21:44:40
い・・・いんす・・・とらく・・・?
443:デフォルトの名無しさん
07/11/17 02:40:14
たー・・・のお・・・ね・・・えちゃん・・・?
444:デフォルトの名無しさん
07/11/17 06:48:29
ハンドアセンブルで COM ファイルを書いてみる。
445:デフォルトの名無しさん
07/11/17 07:24:47
ORG 100
446:デフォルトの名無しさん
07/11/17 07:32:12
ハンドアセンブルが許されるのはZ80までだよねー(AA略
447:デフォルトの名無しさん
07/11/18 10:52:54
全てのものはメモリ上においてあって、位置はアドレスで示せて、ポインタはアドレスを入れる変数、
でいいんじゃね?
448:デフォルトの名無しさん
07/11/18 12:01:50
ポインタの「型」を忘れるなと何度言ったr
449:デフォルトの名無しさん
07/11/18 12:56:38
?
450:デフォルトの名無しさん
07/11/18 14:15:25
エスパーのおれが解説を試みてみる
char *cp;
int *ip;
/* いろいろやる */
cp++;
ip++;
の最後の2行の挙動が>>447には含まれてないってことじゃね?
451:デフォルトの名無しさん
07/11/18 14:37:46
なるほど。ご指摘&解析ありがとう。
では447の補足。
ポインタには加算減算が定義されている。加算結果のアドレスがいくつ増えるかはポインタの型に依存する。
intが4バイトの処理系でintのポインタに+1するとアドレスは4バイト移動する。
これはメモリ上の連続領域にかかれたintデータにアクセスする際に便利。
ぜんぜんわかりやすくないな。サーセン。
452:デフォルトの名無しさん
07/11/18 14:39:50
なるほど。ご指摘&解析ありがとう。
では447の補足。
ポインタには加算減算が定義されている。加算結果のアドレスがいくつ増えるかはポインタの型に依存する。
intが4バイトの処理系でintのポインタに+1するとアドレスは4バイト移動する。
これはメモリ上の連続領域にかかれたintデータにアクセスする際に便利。
ぜんぜんわかりやすくないな。サーセン。
453:デフォルトの名無しさん
07/11/18 14:40:05
加算減算に触れるのには相対アドレス絶対アドレスみたいなのも理解が必要だと思うけど
こういう仕様が表に出ている事のメリットがいまひとつわからない
454:デフォルトの名無しさん
07/11/18 15:10:32
>>447
厳密に言うとメモリ上にない変数もあるのだ、ふっふっふ。
455:デフォルトの名無しさん
07/11/18 15:25:00
レジスタ上ってこと? 確かに忘れてた。ご指摘感謝。
まぁポインタの話をするときはメモリ上って事でいいのでは?
456:デフォルトの名無しさん
07/11/18 15:26:36
いまレジスタってあるの?
457:デフォルトの名無しさん
07/11/18 16:12:24
あるよ、何言ってるんだ?
458:デフォルトの名無しさん
07/11/18 16:28:51
全然意識したことないや
459:デフォルトの名無しさん
07/11/18 16:34:56
じゃあ
register int i;
&i;
ってやってみるといいよ。コンパイラに怒られるから。
460:デフォルトの名無しさん
07/11/18 16:50:18
C言語に register はあるけど、どう扱うかはコンパイラ任せ
じゃない?実際任せるしか無いと思うけど。多少配慮は
してくれるはずだが、下手するとかえって遅くなる場合もある。
CPU 上の話はまたそれはそれで違うよね。
461:デフォルトの名無しさん
07/11/18 17:48:35
レジスタ増えすぎだし人間が管理するより任せた方がいいわな
高級言語でわざわざ意識する機会なんてまず無いわ
462:デフォルトの名無しさん
07/11/18 17:50:14
registerなんてもう10年位使ってない
463:デフォルトの名無しさん
07/11/18 18:26:58
ま、今時register修飾なんか無視するコンパイラがほとんどだよね。
ただしアドレスだけは取れないようになっている。
464:デフォルトの名無しさん
07/11/18 21:02:19
そういえば俺も 10 年以上前にどの変数を register 宣言すると速くなるか、
とか一所懸命自分のコードで調べてた覚えがあるな。けどもうずっと使って
なくてコンパイラ任せ。
465:デフォルトの名無しさん
07/11/20 16:08:13
registerを使わなきゃならんような場面、今後はもうないだろうね。
少ない資源で必死に高速化してた頃が懐かしす。
466:デフォルトの名無しさん
07/11/20 17:48:31
組み込み系ではまだ、たまに使う場面あるけどね。
467:デフォルトの名無しさん
07/11/21 15:31:11
regster使うくらいだったら、自分がアセンブリ言語で書いたほうがいいと考えてしまう。
468:デフォルトの名無しさん
07/11/21 16:32:17
&使わないループ変数には付けときゃいいんだよ。
レジスタが空いてないなら勝手に使われないだけなんだから。
469:デフォルトの名無しさん
07/11/21 16:41:02
そういうど素人なコードは書きたくないなあ。
組み込み系だったらつけるのはわかるけど、
それ以外だったら間抜け以外の何物でもない。
下手したらオプティマイザーを混乱させてかえって遅くなることもあるし。
つっても今の処理系だったらみんな無視するだろうから大丈夫とは思うけど。
なので場所を弁えずregister修飾入れているやつはど素人。
470:デフォルトの名無しさん
07/11/21 16:44:13
>>468
逆!逆!よっぽどの理由がない限りつけないのが普通だってば
471:デフォルトの名無しさん
07/11/21 18:50:12
アドレスを取られたく無い時ぐらいしか思い付かん
472:デフォルトの名無しさん
07/11/21 19:08:20
アドレスを取られたくない時ってのが思いつかん
473:デフォルトの名無しさん
07/11/21 19:39:28
gnuのソースなんか付けまくりだぜ
474:デフォルトの名無しさん
07/11/21 20:23:13
太古のソースを後生大事に保持してるからねえ
475:デフォルトの名無しさん
07/11/21 22:12:01
今時のコンパイラなら謹んで無視するだろ。
476:デフォルトの名無しさん
07/11/21 22:21:49
C++ならregister変数でもアドレス演算子が使えた気がする。
477:デフォルトの名無しさん
07/11/24 10:45:17
最適化なんてコンパイラにやらせときゃいいのさ。
いろんな環境に移植するソースで、いちいちregister付けたり
外したりなんて馬鹿らしくてできん。
478:デフォルトの名無しさん
07/11/25 13:08:45
Cでヌルポが(void *)0ってマクロ定義される理由が分からん。
C++では、「ヌルポを(void *)0って定義してはダメ」って記述されてる
本があるけど、その理由も分からん。
結局、ヌルポは、どう理解しておいたらいいのだ?
Cでは、ヌルポの型は、(void *)なの?
C++では、ヌルポの型は、なんだ?
479:デフォルトの名無しさん
07/11/25 13:24:31
C++の本の方は(void *)型の話じゃなくて
0がダメって言ってるだけじゃないの?
C自体も0とは定義してないはず
型は・・・どうなんだろう
強いて言えばvoid *型な気がするけど
480:デフォルトの名無しさん
07/11/25 13:50:17
NULLは0じゃない。0がNULLなんだ。
この法則に則って考えれば、NULLはCでもC++でも0と定義されるべきであり、それ自体は8進定数と言うことになる。
481:デフォルトの名無しさん
07/11/25 13:55:36
>>478の論点は「型は、なんだ?」だと思うが・・・
ちなみになんで8進?
482:デフォルトの名無しさん
07/11/25 14:14:33
ポインタくらい簡単なものが一般的に「ポインタが難しい」とされてるおかげで、C始めたばっかの人が「ポインタが理解できません」と言ってくれるので(難しいとされているので躊躇せずに言いやすい?)面接のときのモグリ排除に大いに役に立っている。
483:デフォルトの名無しさん
07/11/25 14:16:21
それを考えて新人に特別な扱いせずに
普通に変わった変数としてポインタ教えてたら
やっぱり2年目になっても分かってなかった
484:デフォルトの名無しさん
07/11/25 14:16:55
0で始まるから8進数。
485:デフォルトの名無しさん
07/11/25 14:17:15
ポインタって精々理系にとっての微分積分程度のレベルでしょ
486:デフォルトの名無しさん
07/11/25 14:21:10
16進は0から始まりませんか?
487:デフォルトの名無しさん
07/11/25 14:22:53
>>485
いや、分数の割り算程度でしょ
488:デフォルトの名無しさん
07/11/25 14:24:09
微積分マスターよりポインタマスターの方が数段楽。覚えなきゃいけない事項の絶対量が少なすぎる。
489:デフォルトの名無しさん
07/11/25 14:27:41
ポインタって何を覚えるんだ・・・
490:デフォルトの名無しさん
07/11/25 14:31:09
ポインタ(の存在意義)がわかりませんって面接で言ったらなにがわからないのか聞いてくるから
とくとくと語ってみたら面接官涙目になってた。
491:デフォルトの名無しさん
07/11/25 14:32:16
面接官って技術者の人やってんのかー
ウチの会社は総務だか人事だかがやってたなぁ・・・
492:デフォルトの名無しさん
07/11/25 14:44:45
ポインタがわからないって、ものごとの裏側(仕組み)が
どうなってるのか少しも考えてこなかった証拠じゃね?
コンピュータの中で関数がどうやって呼び出されてるのとか、
変数はどうやってわたされてるのとか、
時計の針はどうやってまわるのとか、
えんぴつとか棒付きアイスはどうやってつくるのとか
普通は自分なりに考えてみるものじゃん
493:デフォルトの名無しさん
07/11/25 14:46:38
赤ちゃんはどうやっ(ry
494:デフォルトの名無しさん
07/11/25 14:57:32
>>492
そうやって裏側の裏側の裏側の……って調べていくとキリがないので、
あるところで計算を打ち切ってcall-by-needで遅延的な思考をすることだってあろう。
そのためにいろんな学問やら処理系やらは多層構造になってるし、
インターフェースが決まってれば実装が見えなくたってかまわないんでしょうよ。
コンピュータをやるなら最低でもアセンブラとかマシン語が云々、とかいう人はそこが分かってない。
495:デフォルトの名無しさん
07/11/25 15:03:53
このスレポインタスレだからしょうがないかと思っていた
496:デフォルトの名無しさん
07/11/25 15:19:54
アセンブラ出身の俺からみてポインタはなんであんな面倒な仕組みなのか理解できないよ。
497:デフォルトの名無しさん
07/11/25 15:21:36
おっちゃん乙
498:デフォルトの名無しさん
07/11/25 15:26:45
>>494
違うんだ
具体的な仕組みを正確につきとめるというより
少なくとも自分のなかでつじつまが合うように
モノゴトの裏側を想像するってこと
抽象化して考えることが出来る奴は、少なくとも
具体の一例を想像して挙げてみることができると思う
499:デフォルトの名無しさん
07/11/25 15:38:00
合理的に考えられる奴ならポインタのおかしさ、不自然さに気づくだろうよ
500:デフォルトの名無しさん
07/11/25 15:39:28
>>478
ぬるぽは、あらゆるポインタ型について存在する。
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++では通らない。
501:デフォルトの名無しさん
07/11/25 16:08:17
>>486
16進定数は0xで始まらないといけないので、数値0をあらわすには0x0とする必要がある。
502:デフォルトの名無しさん
07/11/25 17:58:23
>>499
kwsk
503:デフォルトの名無しさん
07/11/25 17:59:57
kwsk聞いたら宣言の話だった、というのは無しにしてほしい。
504:デフォルトの名無しさん
07/11/25 18:00:50
8進の0って表記では00じゃないの?
505:デフォルトの名無しさん
07/11/25 18:33:06
どっちでも一緒だからどうでもいいよ、ポインタと関係ないし
506:デフォルトの名無しさん
07/11/25 20:31:04
世の中にポインタと関係ないものなんてないよ
507:デフォルトの名無しさん
07/11/25 22:59:05
Javaにはポインタは存在しないのに
なぜ NullPointerException が出てくるんですか?
508:デフォルトの名無しさん
07/11/25 23:03:29
語呂がいいから
509:デフォルトの名無しさん
07/11/25 23:12:29
>>507
ガッ
510:デフォルトの名無しさん
07/11/25 23:17:32
JavaにポインタがないこととJavaVMにポインタがないことは別だから。
511:デフォルトの名無しさん
07/11/26 18:22:20
ポインタがわからないという概念がわからない
512:デフォルトの名無しさん
07/11/26 20:19:17
概念は分かるけど、使い方が難しい、使いどころが分からないってことなんだろう多分
513:デフォルトの名無しさん
07/11/26 23:54:11
同じことをするのに何通りも方法があるのが混乱のもと。
514:デフォルトの名無しさん
07/11/27 00:38:36
だから、バカ用言語のjavaが出来たのだよ
515:デフォルトの名無しさん
07/11/27 02:53:01
同じ著者?のExcelのVBAの本はわかりやすいのに
こっちは結局よくわからんかった。著者はCを知らないっぽ
URLリンク(www.amazon.co.jp)
516:デフォルトの名無しさん
07/11/27 13:53:19
Javaは単に見えなくしてるだけじゃないのか?
517:デフォルトの名無しさん
07/11/27 16:40:33
Javaは全部ポインタなのさ。
518:デフォルトの名無しさん
07/11/27 19:44:39
プリミティブ型はポインタがない。
かつ、オブジェクトでも明示的なアドレス演算ができないという意味では
ポインタとしては不完全。
519:デフォルトの名無しさん
07/11/27 21:33:49
ぷ・・・ぷれみあむがた?
520:デフォルトの名無しさん
07/11/27 21:37:37
アドレス演算なんかあってもしょーがない
521:デフォルトの名無しさん
07/11/28 00:47:47
しょうがないというかJavaにはその概念がないんだからできなくて当然だ。
522:デフォルトの名無しさん
07/11/28 01:33:43
できないからやれないのとできるけどやらないのとの間には越えられない壁がある
523:デフォルトの名無しさん
07/11/28 01:39:01
できないけどやるやつが始末悪い
524:デフォルトの名無しさん
07/11/28 07:01:35
言語仕様上可能だからってやるやつも始末悪い
525:デフォルトの名無しさん
07/11/28 08:10:57
Cでは明示的なアドレス演算がないとプログラムが書けないだけのこと。
526:デフォルトの名無しさん
07/11/29 12:49:27
Cを10年やってきた俺が断言しよう。
ポインタのないC#が理想系にもっとも近い。
C++のように氾濫するライブラリを使いこなすためにキャストの嵐もないし。
527:デフォルトの名無しさん
07/11/29 13:05:36
俺もそう思うー
528:デフォルトの名無しさん
07/11/29 13:10:45
C++を10年やってから言ってください^^
529:デフォルトの名無しさん
07/11/29 13:12:10
aho
530:デフォルトの名無しさん
07/11/29 14:18:08
C++も2~3年はやってるがこんな扱いづらい言語はないよ。
自分で一から作るならいいけど、実際の現場じゃ色んな人が触ったソースも
見なきゃならないわけで、当然のように色んなライブラリが使われてる。
次から次へと覚えることが多すぎてヘボな俺の頭はついてけないぜ。
あとC++は文字列だけを見てもCString、std::string、System::String*、TCHAR*、WCHAR*、
CAtlString、BSTR、CComBSTRなどなど。おぞましいほど多様な形態がある。
C#だと、ほぼstring型で統一されてるだがなぁ。
C++は使い古されてもうカオス状態。言語としては何でもできる良い言語だけど
俺はもう嫌だ。ボスケテー
531:デフォルトの名無しさん
07/11/29 18:54:21
>>おぞましいほど多様な形態がある。
それはC++のせいではない。
そこの区別がつかないようでは(略
532:デフォルトの名無しさん
07/11/29 19:00:49
CLI(笑)
533:デフォルトの名無しさん
07/11/29 20:26:42
C++は
534:デフォルトの名無しさん
07/11/29 20:38:54
その中でC++の文字列型と言えるのはstd::stringだけじゃねぇ?
535:デフォルトの名無しさん
07/11/29 20:56:17
まぁ C++ は歴史も引きずってて自由でやり放題だからな…
自分でさらっと書くのには Java とかより楽で好きだけど、
他人のコードには手を入れたくないな。
536:デフォルトの名無しさん
07/11/29 21:32:12
おまえのも他人からそう思われてるよ
自分のが一番綺麗だと思ってるうちはまだまだ未熟
537:デフォルトの名無しさん
07/11/29 22:04:30
そういうカオス領域の扱いに長けているのがC++だと思っている。
538:デフォルトの名無しさん
07/11/29 22:28:55
>>536
別にきれいだと思っているとは書いていないよ。勉強して努力はしているが。
できるだけ自分で責任を持って直したいと思ってる。
539:デフォルトの名無しさん
07/11/29 22:36:54
ポインタと関係ないですが
540:デフォルトの名無しさん
07/11/30 01:39:03
趣味でオナニープログラムして楽しむならC++だな。
仕事では、使いたくねぇ
541:デフォルトの名無しさん
07/11/30 02:52:10
>>539
ポインタを語るスレではないからな
そもそも学びたい奴がいないならこのスレいらんだろ
ポインタがわからんやつとかいないじゃん
542:デフォルトの名無しさん
07/11/30 13:07:43
ポインタをどうやって学ぼうかってスレなんだから
ポインタわかんない人も来るだろw
543:デフォルトの名無しさん
07/11/30 17:01:39
ポインタ勉強中でなんとなく面白くなってきた
関数は常に値渡し
参照渡しでも結局はアドレスと言う値を渡してるに過ぎない
って認識であってる?
544:デフォルトの名無しさん
07/11/30 17:06:45
うん
545:デフォルトの名無しさん
07/11/30 19:29:27
C言語は値渡ししかできない、でいいんですよね?
546:デフォルトの名無しさん
07/11/30 19:34:13
今更Cやポインタなんて勉強してるやつはバカだろw
言語なんて勉強する意味がない。
コーダーは中国から買ってくれば良い
547:デフォルトの名無しさん
07/11/30 19:38:14
そうして中国に追いつかれることに気付かない日本人。
私は自分のためにCやポインタを勉強する。
548:デフォルトの名無しさん
07/11/30 19:40:59
お前がバカなんだっつの
549:デフォルトの名無しさん
07/11/30 19:41:40
まともなコードが書けない奴が、まともな設計できるわけねえし
550:デフォルトの名無しさん
07/11/30 19:43:55
他にも勉強する事が多くてなぁ・・・
まともなコードが描ける頃には髪の毛白くなってそうだよ
551:デフォルトの名無しさん
07/11/30 19:47:09
コード書きは全てに優先するんだよ
無知か?おまえ
552:デフォルトの名無しさん
07/11/30 19:48:00
なかなか粗悪な暇の潰し方だな
553:デフォルトの名無しさん
07/11/30 20:02:31
職人みたいに低能頑固薄給視野0になりたければ
コード書けばいいと思うがなw
コーダーなんてインドから集めてくればいい
554:デフォルトの名無しさん
07/11/30 20:04:25
コーダ以外コード書く必要ないと思ってる化石か
555:デフォルトの名無しさん
07/11/30 20:05:04
マ板でどうぞ
556:デフォルトの名無しさん
07/11/30 21:20:07
GoogleやMSの社員もコード書いている件について
557:デフォルトの名無しさん
07/11/30 21:41:59
マネージャクラスでもな
558:デフォルトの名無しさん
07/11/30 21:43:34
それが普通
559:デフォルトの名無しさん
07/11/30 21:47:34
じゃあなんで日本のマネージャクラスはコード書かないのが多いの?
なんで日本の文化ではコード書きは底辺がすることって信じられてるの?
560:デフォルトの名無しさん
07/11/30 21:52:06
typedef void* NULL;
#define NULL 0
561:デフォルトの名無しさん
07/11/30 21:58:37
>>559
それが一番妥当かつ効率性が高いとう結果
なんだよ。結局コードなんて書いても成果を
出しましたって小細工しているにすぎないからな
562:デフォルトの名無しさん
07/11/30 22:01:24
日本語で
563:デフォルトの名無しさん
07/11/30 22:07:28
>>556-558
書くモノしか見てないけど Google とか技術部いい感じだよね。
Norvig さんとか。
564:デフォルトの名無しさん
07/11/30 22:23:07
いい感じじゃねーだろ
565:デフォルトの名無しさん
07/11/30 22:39:04
英語身に着けて外国でもなんでもいけばいい。
コードも書けない奴の言うことなんて誰もきかない。
566:デフォルトの名無しさん
07/11/30 22:49:30
視野が狭すぎてすげーなw
567:デフォルトの名無しさん
07/11/30 23:08:53
昔と比べてコードの抽象度が高いから、自然言語を使う必要性が減ったってことでしょ
コーダにコーディングをアウトソースするときに、インプットとして「コード」が必要になったってこと
昔と大して変わってない
568:デフォルトの名無しさん
07/11/30 23:25:48
今日帰りにインド人がやってるカレー屋に行ったんだけど、
カレー注文したらスプーンがついてこなくて
「あ、本格的な店なんだ」とか思って手で食ってたら、
半分くらい食ったときに、インド人の店員が奥から
すげー申し訳なさそうな顔してスプーン持ってきた
569:デフォルトの名無しさん
07/11/30 23:34:53
>>568
おもしろいコピペがあったら貼るスレinマ板part4
スレリンク(prog板)l50
570:デフォルトの名無しさん
07/12/04 15:03:58
>>128
571:デフォルトの名無しさん
07/12/04 17:44:08
>>128
が改悪したようにしか見えない件についてw
572:デフォルトの名無しさん
07/12/10 21:58:52
うおおぉぉ!
Javaばかりでプログラム組んでいてC++にに戻ってきたらメモリ管理だるすぎて泣きそうだw
Javaはメモリ管理が楽だからいいよな
よくC#、Javaはポインタがなくて良いとか言う奴いるけど、これらの言語の利点はメモリ管理の楽さだろと突っ込みたいぜw
それにC#、Javaはむしろポインタの固まりだしな
C++のメモリ管理の経験があると、ガーベジコレクション等に負担をかけず高速なプログラムを組めることが身に染みてわかったぜ、自動解放だからってテキトーに組むとメモリリークは発生しないにしろ遅いなw
結論、C++のようなメモリ周りがシビアな言語をやる価値は今でも十分すぎるほどあると
573:デフォルトの名無しさん
07/12/10 22:40:35
C++ならスマートポインタ使えばいいのに
574:デフォルトの名無しさん
07/12/10 22:52:08
違う違う。
C++ならスマートポインタ実装すればいいのに
575:デフォルトの名無しさん
07/12/11 07:28:30
俺は、自分でメモリ管理しないと、不安でしょうがない。
JavaやC#だと、本当にリークしてないのか不安になってたまらない
576:デフォルトの名無しさん
07/12/11 13:56:30
aho
577:デフォルトの名無しさん
07/12/11 15:47:48
GUIでガベコレの遅延がはっきり感じられるとつらいね
元々もっさりなのに時々かくかくではストレスもたまる
578:デフォルトの名無しさん
07/12/11 16:24:29
なんでそうなるコードを書くの?
579:デフォルトの名無しさん
07/12/11 17:21:57
リソース管理が自動化されてる言語しかやったことがない、とか
580:デフォルトの名無しさん
07/12/13 16:16:38
int array[10];
で&arrayってvoid*?
581:デフォルトの名無しさん
07/12/13 16:52:14
int**
582:デフォルトの名無しさん
07/12/13 17:04:52
自己レス
int (*)[10]か。
>>581
あれ?それでもいいの?
試してみます
583:デフォルトの名無しさん
07/12/13 17:13:53
配列のポインタと、ポインタのポインタを間違えるな
584:582
07/12/13 17:24:09
int**はダメだた・・・
585:デフォルトの名無しさん
07/12/13 17:32:46
>>572
俺にはC++のメモリ管理がだるいと感じるお前が理解できない
new したらdeleteすればいいだけじゃん
なにがだるいんだか・・・
586:デフォルトの名無しさん
07/12/13 17:36:05
それがだるい。
587:デフォルトの名無しさん
07/12/13 18:31:19
>>585
C++のメモリ管理ってスマポンタだろ
588:デフォルトの名無しさん
07/12/13 18:33:31
>>580
配列名だけで先頭要素のアドレスになる。
ただし、それは変数じゃないので&を付けても無駄。
int array[10];
printf("%p¥n", array);
printf("%p¥n", &array);
で試してごらん。
589:デフォルトの名無しさん
07/12/13 18:34:41
>>586
よきにはからえ、じゃないと駄目だよね。
ゆとりプログラミングの時代さ。
590:デフォルトの名無しさん
07/12/13 19:24:19
>>588
arrayは配列の先頭要素へのポインタ
&arrayは配列へのポインタ
だから値は同じだけど意味が違うんじゃないですか?
591:デフォルトの名無しさん
07/12/13 19:51:16
>>589
コンパイラ使うのも似たような言葉で馬鹿にされたものだけどね。
592:デフォルトの名無しさん
07/12/13 21:53:28
>>588
違う。
arrayはポインタでは「ない」。
ポインタは変数。配列名は定数。
593:デフォルトの名無しさん
07/12/13 21:57:39
単にarrayと書いたときに「どう解釈されるか?」の話じゃないの?
594:デフォルトの名無しさん
07/12/13 22:11:13
アレーイ?
595:デフォルトの名無しさん
07/12/13 23:43:50
アルェーイ?
596:デフォルトの名無しさん
07/12/14 10:44:32
配列とポインタは違うのに同じだ、
と言うニュアンスでK&Rで解説されたために、
その後のC言語の入門書で、
よく分ってないヤツがゴチャゴチャにして説明するようになって、
今に至る
597:デフォルトの名無しさん
07/12/14 11:49:52
基本的に違うけど引数としてはどっちでもとれるって状況
だと思うが引数として使うってのが
けっこうメジャーな使いかたなためごっちゃになってるって
状況だとおれは認識してる。
598:デフォルトの名無しさん
07/12/14 11:55:35
>>597
>基本的に違うけど引数としてはどっちでもとれるって状況
間違い。
引き数としては、常にポインタ。
# 但し、Cの場合。
599:デフォルトの名無しさん
07/12/14 12:36:31
学校で課題で「配列とポインタの違いを説明せよ」みたいなのあったなぁ・・・
600:デフォルトの名無しさん
07/12/14 16:41:13
>>585
自分がnewしてdeleteするなら別に面倒では無いだろうけど
リスト構造でなおかつ、その構造が要素追加にnew、削除にdeleteを使うようなプログラムはが何万行と続くとデバック作業がかなり面倒だろ?まあ、それはそれで利点もあるがな
それを面倒臭くないというお前はすごいな、それとも極小規模なプログラムしか組んだことないのかな?
601:デフォルトの名無しさん
07/12/14 17:58:01
>>599
配列は箱を列に並べたもの
ポインタは矢印
でいいかな?
602:デフォルトの名無しさん
07/12/14 18:43:34
>>601
大学のレポートって、お絵かきでOKなの?
603:デフォルトの名無しさん
07/12/14 18:59:17
>>598
そういうことじゃなくてポインタ変数でも配列変数でも
代入できるだろうって意味。
604:デフォルトの名無しさん
07/12/14 19:25:33
住所そのものと住所を書いた紙が別なのは当たり前だろが
住所そのものを変えるには市町村合併でもするほかないが紙に書かれた住所を書き換えるだけなら簡単
605:デフォルトの名無しさん
07/12/14 19:31:58
>>604
なんかオブジェクト指向の例え話なみに微妙な話だな
606:デフォルトの名無しさん
07/12/14 19:50:48
たとえ話に住所って言葉を使うのが間違ってそう
607:デフォルトの名無しさん
07/12/14 19:54:39
ポインタなんて
[C言語 ポインタ完全制覇]
読んで理解したなら
後は、実践を繰り返すだけだろーよ
608:デフォルトの名無しさん
07/12/14 19:56:31
どんなに微妙でも人間の脳構造はアナロジーの利くものの方が
覚えやすくできてんだからそれでいいじゃんよ。
609:デフォルトの名無しさん
07/12/14 20:05:30
C FAQの6.13
URLリンク(www.kouno.jp)
URLリンク(c-faq.com)
に
・・・本当に配列そのものへのポインターが必要な場合は「int (*ap)[N];」 のような表現を使う。
ここでNは配列のサイズを表す(質問1.21も参照)。
配列の大きさがわからない場合、Nを省略することができる。
しかし 結果として得られる「大きさが未知の配列へのポインター」は役に立たない。
ってあるんですが、
int array[10];
int (*ap)[];
ap = &arrrayってエラーにならないんですか?
610:デフォルトの名無しさん
07/12/14 20:17:14
>>609
配列の不完全型ってヤツか?
良く分からんが、違う構造体同士で相互参照する時なんかに使う
構造体の不完全型の親戚みたいなもんかな
611:デフォルトの名無しさん
07/12/15 02:27:42
>>609
試せば良いじゃんよ
612:デフォルトの名無しさん
07/12/15 02:32:55
VC++ExpressEdition
d:\work\vc\array\arrayptr.cpp(9) : error C2440: '=' : 'int (*__w64 )[10]' から 'int (*)[]' に変換できません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
613:デフォルトの名無しさん
07/12/15 04:19:56
Cより先にアセンブラやれ!!
アドレスの概念を理解しないでいきなりやるから
難しくなるんだよ!!
614:デフォルトの名無しさん
07/12/15 05:35:26
それも極端な話だなあ、と思う反面確かにそれが近道だよなあと思っているおれがいる
615:デフォルトの名無しさん
07/12/15 08:55:36
ちょっと疑問なんだが、配列自体が先頭のアドレスを示しているのに、
さらにそれのアドレスが欲しい場合ってどういうケース?想像つかないんだけど。
616:デフォルトの名無しさん
07/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;
}
617:デフォルトの名無しさん
07/12/15 12:08:10
>>616
添字でアクセスできるのに、わざわざポインタつかってわかりにくくしてる気がするんだが。
↓と同じことでしょ?
void aryfunc(int ary[N][N])
{
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
ary[i][j]++;
}
}
}
618:デフォルトの名無しさん
07/12/15 12:11:15
>>615
配列の配列とか、配列の配列の配列とか、つまり多次元配列を
関数の引数として渡すときに必要だな
619:デフォルトの名無しさん
07/12/15 12:15:46
>>615
配列名は、配列の「先頭の要素」のアドレス。
配列名に&をつけた場合は配列「そのものの」のアドレス。
ポインタの値としては同じ値だが、意味が違う。
なんか思い違いをしてる気がするぜよ
620:615
07/12/15 12:48:40
>>618
多次元配列も、型と先頭アドレスと要素数を何らかの形で渡せばいいわけだから、
アドレスに関しては配列名のみを渡せばいいんじゃないの?
>>619
意味の違いは理解してるつもりだが、これじゃなきゃできない、というケースが思いつかなくてさ。
先頭の要素のアドレスと、配列そのもののアドレスが違うことがあれば理解もできるってもんだが…
621:デフォルトの名無しさん
07/12/15 13:12:30
&つけようがつけまいが
値同じだから意味は同じ
しょうもねー議論してるんじゃねーよw
622:デフォルトの名無しさん
07/12/15 13:22:07
そんな乱暴なw
623:デフォルトの名無しさん
07/12/15 13:54:30
>>621
型が違うから意味は違うだろ
624:デフォルトの名無しさん
07/12/15 14:29:01
>>621
おまい、ポインタはvoid*さえあればいい派だなw
625:デフォルトの名無しさん
07/12/15 14:51:34
void *と
void **あれば何もいらねーだろ。
型に束縛される書き方してると
汎用性失う言語だし
携帯のドライバなんかは
int Inithoge(void * data1, void *data2, void *data3)
こんなの普通だぞ?
626:デフォルトの名無しさん
07/12/15 15:01:07
携帯用のドライバなんかどうでもいい
627:デフォルトの名無しさん
07/12/15 15:42:40
URLリンク(www.kouno.jp)
>>配列の配列は、ポインターへのポインターに成り下がることはない。
これを読んで思ったんだけど、
int main(int argc, char **argv)は間違い(行儀が悪い)で、
int main(int argc, char *argv[])が正しい(行儀が良い)の?
628:デフォルトの名無しさん
07/12/15 16:43:52
>>627
関数の引数は常にポインタしかとらない。
字面上配列の形をしていても、そいつはポインタだ。
だから、
void foo(char *pa[]);
void bar(char **pp);
char aa[10][10];
という関数と配列の配列があったとして、以下の呼び出し
foo(aa);
bar(aa);
のどちらも違法(コンパイラが怒る)だ。
これが「配列の配列は、ポインターへのポインターへ成り下がることはない」の意味だ。
ちなみにmainに渡されるargvはポインタの配列であり、これはポインタのポインタで受けられる。
629:デフォルトの名無しさん
07/12/15 18:02:39
argvがポインタの配列だから
void hoge(char str[])を
void hoge(char *str)と書けるのと一緒で
int main(int argc, char *argv[])を
int main(int argc, char **argv)って書くのは全然おかしくないわけか。
むしろ後者の方が実際にやっていることとイメージが近いな。
630:デフォルトの名無しさん
07/12/15 18:45:17
const char* const argv[] って書きたいところだけど
631:デフォルトの名無しさん
07/12/16 06:01:17
ポインタの配列と、配列の配列の違いを、
いくら説明しても全く理解できないヤツ、
会社に一人くらいいるよな・・・
プロのプログラマーのはずなのに
632:デフォルトの名無しさん
07/12/16 06:05:55
・ポインタを「何かを指している矢印」
・配列を「何かが入っている箱」
という図を描いてみて、その上で配列の配列とポインタの配列を描いてみればすぐわかると思うんだけどな。
633:デフォルトの名無しさん
07/12/16 11:13:25
>>631
専門書籍で使われてる言葉をそのまま使っても伝わらないよ
一度日本語に直す、相手に伝わる言葉に直す
そういうリファクタリングを繰り返してバカ矯正プログラムが完成するんだ
634:デフォルトの名無しさん
07/12/16 16:47:55
ダブルポインタと呼ぶのはやめてほしい
635:デフォルトの名無しさん
07/12/16 17:07:40
図ばかり頼りにして、言葉を大事にしないのは、理系プログラマの欠点だ
636:デフォルトの名無しさん
07/12/16 21:45:05
文章から何かをイメージする能力が読む側に備わってない
理系文系だ関係なく読解問題が苦手なの増えてるだろ?
だからこっちでイメージを用意してやりようやく相手が理解できる
マンガと同じだわ
637:デフォルトの名無しさん
07/12/16 22:15:45
そうゆうこと
嫌韓を読めばよくあの国が理解できるのと一緒
638:デフォルトの名無しさん
07/12/16 22:49:12
嫌韓って漫画じゃねえよあれ。カット集じゃん
全編挿絵っつうか
639:デフォルトの名無しさん
07/12/16 23:05:44
マジレスすること自体
ゆとりだと自己主張しているものだな。
このスレ削除でよくねーか?
640:デフォルトの名無しさん
07/12/16 23:08:20
時々思いがけない議論があってちょっと楽しいから
削除しないで放置しておいて欲しい
641:デフォルトの名無しさん
07/12/16 23:13:43
マジレスでもなんでもないだろw
どんどん話題が枝葉にそれてるだけで
642:デフォルトの名無しさん
07/12/17 00:08:20
まず、学ぶべきことを定義するのが先じゃないか?
アドレスの代入、アドレスが示す値の参照
関数へのアドレス渡し
ポインタを利用するアルゴリズムを理解
こんな感じでさ
643:デフォルトの名無しさん
07/12/17 00:14:32
レス600過ぎてから定義されてもwww
644:デフォルトの名無しさん
07/12/17 01:39:57
老いて益々盛んってことわざもあるし
人生に手遅れって言葉はないと思うんだ
645:デフォルトの名無しさん
07/12/17 04:57:57
w
w
646:デフォルトの名無しさん
07/12/17 11:54:52
図に書いて説明するより、ソースレベルデバッガでポインタ変数にどんな値が入って、
その値が指すアドレス(とその前後アドレス)にどんな値が入ってるのか
見せた方が分かりやすいと思う。
647:デフォルトの名無しさん
07/12/17 12:32:54
>>646
ポインタの実際の値がいくつなんて、
どうでもよいことじゃね?
648:デフォルトの名無しさん
07/12/17 17:17:05
ポインタをsizeofすると正体がわかるよね
32bitの処理系なら型に限らず全部4だし
649:デフォルトの名無しさん
07/12/17 18:12:01
>647
いや、そういう正体のつかめ無さが、初心者には分かりづらいんじゃない?
まずは抽象度を下げて、具体例から入った方がいい。
650:デフォルトの名無しさん
07/12/17 21:20:39
>>648
ただそんなことに頼っていると書いているコードがしばらくたって
使おうと思うと動かなくなる。
651:デフォルトの名無しさん
07/12/17 23:40:06
ポインタは単純だ
for (int i = 0; dst[i] = src[i]; i++);
がポインタのおかげで
for (; *dst++ = *src++;);
できるだけだ
652:デフォルトの名無しさん
07/12/17 23:59:44
あまり違わない気がする・・・
653:デフォルトの名無しさん
07/12/18 02:16:14
つか、C++使い始めてからポインタなぶるなんて中々無くなったわ
654:デフォルトの名無しさん
07/12/18 02:48:13
関数での受け渡し以外にポインタなんて使う?
655:デフォルトの名無しさん
07/12/18 03:51:26
mallocなどで確保するときに使うよ
656:デフォルトの名無しさん
07/12/18 09:50:06
文字列だってポインタじゃん
657:デフォルトの名無しさん
07/12/18 18:39:02
>>654
自己参照型構造体使ってないのか?素人さん?
658:デフォルトの名無しさん
07/12/18 20:34:35
玄人さんがお見えになったぞ!
659:デフォルトの名無しさん
07/12/18 20:48:28
ポインタ使うのに、玄人も素人もない
660:デフォルトの名無しさん
07/12/18 23:03:10
グローバル変数の初期化順序が保証されてないから、初期化順が重要な
グローバルオブジェクトはポインタだけ定義しといて、初期化関数で順番に
newしていくとか。
(順序が重要なオブジェクトをグローバルにすることの是非は置いといて)
661:デフォルトの名無しさん
07/12/19 01:03:25
>>654
オブジェクトいろいろ弄る時に使うよ。入れ替えたりとか便利。
662:デフォルトの名無しさん
07/12/19 01:33:28
コールバックするのにつかうー
longjumpするのにも使う
663:デフォルトの名無しさん
07/12/19 01:43:57
もう「無いと困る」でいいんじゃね?
664:デフォルトの名無しさん
07/12/19 01:51:40
>>657
データ格納するならデータベース使わね?
組み込みなら、一時的な(親機に渡す日次処理で消えてしまうよな)データの格納に使ったりするけど
今は組み込みもDBの採用が進んでるし
665:デフォルトの名無しさん
07/12/19 01:55:29
それとこれとは話が違う・・・
666:デフォルトの名無しさん
07/12/19 02:02:54
話が違うというか、本物が来ちゃったようだ・・・
667:デフォルトの名無しさん
07/12/19 02:37:02
ポインタ使って2-3木を作りたいと思っているのですが
ここを見ればおkていうサイトとかありませんか?
668:デフォルトの名無しさん
07/12/19 08:24:16
データ構造とアルゴリズムを扱った書籍を買った方がいいと思うね
669:デフォルトの名無しさん
07/12/19 10:32:47
てか作ればいいじゃん
670:デフォルトの名無しさん
07/12/19 10:48:42
自己参照構造体というのを試してみたんだが、メモリの開放が面倒そうだ。
自分を指してる一つ前の構造体のアドレスってどうやって取得するの?
元々そういう風に構造体を作らなきゃダメ?↓みたいな感じで。
typedef struct tree {
struct tree *prev;
struct tree *next;
int x;
} tree_t;
671:デフォルトの名無しさん
07/12/19 10:51:29
駄目
672:デフォルトの名無しさん
07/12/19 10:59:19
自分は初期の頃はtree->next->nextでNULL見つけてtree->nextを解放したら,
tree->nextをNULLにする.ポインタ最初に戻してまた上から見るみたいなことやってたw
双方向だとその辺ずいぶん速くなるよね.
673:デフォルトの名無しさん
07/12/19 11:32:57
>>672
再帰すればいいじゃん。
674:デフォルトの名無しさん
07/12/19 11:44:48
>>672
うん,いまは順方向だけの場合そうやってる.
順j方向リストの場合サーチかけてるポインタじゃなくて
その次に対して操作すると一つ前のアドレスはサーチかけてる
ポインタそのものになるということをいいたかった.
675:デフォルトの名無しさん
07/12/19 12:56:15
>>668 >>669
わかりました、頑張ります!
676:デフォルトの名無しさん
07/12/19 13:35:02
おまいら、1方向の線形リストならもっとうまい手があるだろうが。
あるノードを消す場合は、その後ろのノードを消すノードに上書きして、
後ろのノードをfreeするんだよ。
677:デフォルトの名無しさん
07/12/19 17:35:31
一方向の線形リストなら「上書き」って必要ないでしょ
消すノードの前のノードと後ろのノードを繋げてから
対象ノードをfreeすればいいんじゃないの
678:676
07/12/19 17:39:23
1方向って*prevがないやつか
ごめんなさい
679:デフォルトの名無しさん
07/12/19 17:39:55
おれ677だった
ごめんねごめんねごめんね
680:デフォルトの名無しさん
07/12/19 17:56:32
>>679
許すからキニシナイ。
真面目な話、あるノードを消したければ後ろのノードの内容を上書きして後ろの方の
ノードを消すなんてのは一方向線形リストを扱う時の基本的なアルゴリズムだよ。
先頭からまた検索するなんて、無駄無駄無駄~!
じゃ、あるノードの前に新しいノードを追加する時はどうすれば無駄がないか
考えてみそ。
681:デフォルトの名無しさん
07/12/19 19:19:59
ポイントを押さえて学ぶべき
682:デフォルトの名無しさん
07/12/19 19:57:24
2次元配列を渡すときに大きさが分からなくて
void hoge(int array[][SIZE])見たいな書き方ができないときは
void hoge(int* array[])か
void hoge(int** array)で書くしかない?
683:デフォルトの名無しさん
07/12/19 20:00:19
動的確保してポインタへのポインタで渡す
684:デフォルトの名無しさん
07/12/19 20:19:36
動的静的関係なくね?
685:デフォルトの名無しさん
07/12/19 20:22:04
渡す側がサイズを知らないってどういうこと?
686:デフォルトの名無しさん
07/12/19 20:26:19
よくあること
687:デフォルトの名無しさん
07/12/19 20:30:01
>>682
また、ポインタと配列がゴチャゴチャになってしまって分からないヤツがきたな
688:デフォルトの名無しさん
07/12/19 20:30:38
受け取る側が渡す側からサイズを教えてもらえないと、2次元として扱うのは無理なのだが
689:デフォルトの名無しさん
07/12/19 20:31:15
番兵くんがいればそうとも限らない
690:デフォルトの名無しさん
07/12/19 20:40:50
もう、なんでもかんでもvoid*で渡して、
後は、渡されたほうの関数の中で好きにすれば、
なんでもOKだ
691:682
07/12/19 20:46:15
int sum(int** array,int i_size,int j_size){
int 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)も実行できるけど
*じゃなくて[]を使おうとすると大きさ分からなくて困るじゃん…
と書こうとしたんだが、静的配列じゃ動かないのなこれ。
いろいろ勘違いしてたすまん。
692:デフォルトの名無しさん
07/12/19 20:49:02
malloc()したときに確保した要素数わかってるんだから、
それを関数に渡せばいいだけだと思うが。
要素数を教えないで、どうやって終端を認識するの?
693:デフォルトの名無しさん
07/12/19 20:58:44
void hoge(int **ary, int m, int n)
{
/* ごにょごにょ */
}
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;
}
こういうことじゃないの?
694:デフォルトの名無しさん
07/12/19 22:23:32
配列でもポインタが扱える
では無く、むしろ
配列はポインタで処理される
と考えるんだ
695:デフォルトの名無しさん
07/12/20 00:33:27
つか、STL使えよって話だよな
696:デフォルトの名無しさん
07/12/20 20:29:52
OTLもなかなかいいよ
697:デフォルトの名無しさん
07/12/20 20:36:39
ポインタの壁に挫折した人みたい
698:デフォルトの名無しさん
07/12/21 04:26:47
いろいろ書いて実行してみること。
アセンブラしてたからかな?すぐ理解できた。
699:デフォルトの名無しさん
07/12/21 09:21:28
今からポインタ学ぼうって人が「じゃあアセンブラからやろう」って思う訳が無い
700:デフォルトの名無しさん
07/12/21 12:01:32
アドレス変換テーブルの話なんか聞かされて
よけいわけわからなくなっちゃったような奴なら
じゃあアセンブラからやろうと思うんじゃないか
701:デフォルトの名無しさん
07/12/21 14:13:17
やる気さえあればすぐ覚えられる
最長でも1日悩み抜けば覚えられるレベル
厄介なのは、すぐ意気消沈してしまう性格
702:デフォルトの名無しさん
07/12/22 03:07:15
**
をポインタのポインタなどと訳する事で余計に初心者の理解を妨げてるように感じる。
703:デフォルトの名無しさん
07/12/22 03:11:39
じゃあなんて
704:デフォルトの名無しさん
07/12/22 03:29:18
ポインタ(変数|オブジェクト|インスタンス)へのポインタ
705:デフォルトの名無しさん
07/12/22 03:34:15
ようするにポインタへのポインタじゃないか
706:デフォルトの名無しさん
07/12/22 11:26:22
pointer to pointer
「の」は適切じゃないかもな
707:
07/12/22 11:26:53
ポインタ変数を型とするポインタとか
708:デフォルトの名無しさん
07/12/22 11:35:30
>>707
わけわからん
709:デフォルトの名無しさん
07/12/22 12:45:55
toに引きずられてるアホども
710:デフォルトの名無しさん
07/12/22 13:05:50
ポインタとポインタでいいじゃん
2こ仲良くていいじゃん
711:デフォルトの名無しさん
07/12/22 13:36:43
int x = 1, *px, **ppx;
px = &x;
ppx = &px;
printf("%d %d %d", x *px, **px);
712:デフォルトの名無しさん
07/12/22 13:54:03
>>711
いいたいことは判るが
> printf("%d %d %d", x *px, **px);
printf("%d %d %d", x, *px, **ppx);
713:デフォルトの名無しさん
07/12/22 14:32:04
「ポインタのポインタ」と聞いて、その本質と真意を理解できないおまえらは、頭悪い。
100の言葉をもって、最初から最後まで全てを語りつくさないと理解できないのか?
714:デフォルトの名無しさん
07/12/22 15:04:33
初心者にとっては解りにくいって話が、どうしてそうなる?
715:デフォルトの名無しさん
07/12/22 15:10:02
それは誤解
言葉がわかりにくいんじゃないんだよ
716:デフォルトの名無しさん
07/12/22 15:10:08
ポインタのポインタ の検索結果 約 4,450 件中 1 - 10 件目 (0.02 秒)
URLリンク(www.google.co.jp)
ポインタへのポインタ の検索結果 約 2,600 件中 1 - 10 件目 (0.21 秒)
URLリンク(www.google.co.jp)
ダブルポインタ の検索結果 約 2,430 件中 1 - 10 件目 (0.21 秒)
URLリンク(www.google.co.jp)
717:デフォルトの名無しさん
07/12/22 16:15:03
char *cp;
を「charのポインタ」って言うんだから、
void **pp;
を「ポインタのポインタ」って言ってもいいじゃないか。
718:デフォルトの名無しさん
07/12/22 16:20:44
うん
719:デフォルトの名無しさん
07/12/22 16:23:48
俺char *は「charへのポインタ」と言っているよ。
720:デフォルトの名無しさん
07/12/22 16:25:29
>>717
ポインタ=何かを指す=指向性のあるもの。よって、
char *cp は「char型へのポインタ」
void **pp は「void型へのポインタへのポインタ」
721:デフォルトの名無しさん
07/12/22 16:27:03
うん
722:デフォルトの名無しさん
07/12/22 16:28:10
>>720
それでもいいけどね、「へ」は無くてもいいんだよ。
723:デフォルトの名無しさん
07/12/22 16:35:02
>>720
型は指してないんじゃね?
724:デフォルトの名無しさん
07/12/22 16:43:12
俺も意識して
「~のポインタ」とか「関数ポインタ」とかじゃなくて
「~へのポインタ」って言ってる
725:デフォルトの名無しさん
07/12/22 16:48:16
それでも通じるからいいんじゃね
726:デフォルトの名無しさん
07/12/22 16:48:18
「へ」は重要だ。「へ」があることによって、何かを指してると認識できる。
「~のポインタ」だけだと意味が通じない。
…ということを言いたかった。
727:デフォルトの名無しさん
07/12/22 16:48:59
いや「へ」はなくても通じるんだよ
728:デフォルトの名無しさん
07/12/22 16:53:22
そもそもポインタって何かを指すものじゃん
729:デフォルトの名無しさん
07/12/22 17:32:03
初心者にとって、という話だろ?「へ」はあったほうがいいよ。
既に理解してる人にはどっちでもいい。
730:デフォルトの名無しさん
07/12/22 17:38:55
初心者にとっても有っても無くても同じ。
731:デフォルトの名無しさん
07/12/22 17:56:14
じゃあvoid ***pppはなんていうの?
char ****cpppはなんていうの?
732:デフォルトの名無しさん
07/12/22 19:01:12
そんなものは出てきてはいけないw
733:デフォルトの名無しさん
07/12/22 19:53:13
___ ━┓
/ ―\ ┏┛
/ノ (●)\ ・
. | (●) ⌒)\
. | (__ノ ̄ |
\ /
\ _ノ
/´ `\
| |
| |
___ ━┓
/ ― \ ┏┛
/ (●) \ヽ ・
/ (⌒ (●) /
/  ̄ヽ__) /
. /´ ___/
| \
| |
734:デフォルトの名無しさん
07/12/22 20:38:12
「への」に1票
735:デフォルトの名無しさん
07/12/22 22:39:37
>>731
void ***pppやchar ****cpppなんて使う機会ない
736:デフォルトの名無しさん
07/12/23 02:26:02
へ へ
の の
も
へ
737:デフォルトの名無しさん
07/12/23 04:23:45
>>731
初心者がそんなもの使うかアホ
極論に持って行こうとするなよボケ
738:デフォルトの名無しさん
07/12/23 13:59:37
ダブルポインタでええやん。
739:デフォルトの名無しさん
07/12/23 14:23:10
じゃあダブポで
740:デフォルトの名無しさん
07/12/23 14:23:33
ゾッ
741:デフォルトの名無しさん
07/12/25 02:33:11
**のまま使ってる時点でほとんどクソコードだろ。
ふつうtypedefにするかstructにいれる。
742:デフォルトの名無しさん
07/12/25 09:29:32
いやいや、ある構造体の領域をヒープから確保する関数の場合とか、
**を渡した方が自然な場合もある。
743:デフォルトの名無しさん
07/12/25 13:07:01
どうせならデュアルポインタのほうがかっこよくね?
744:デフォルトの名無しさん
07/12/25 14:07:43
クアッドポインタにオクタポインタっすね
745:デフォルトの名無しさん
07/12/25 17:19:37
ポンタでよくね?響きが萌える
746:デフォルトの名無しさん
07/12/25 17:22:22
ポイポインタ
747:デフォルトの名無しさん
07/12/25 20:46:28
つ[*&]
748:デフォルトの名無しさん
07/12/25 21:01:54
ポインヨ
749:デフォルトの名無しさん
07/12/25 22:06:00
>>745
あのjunkyのおっさんですか?
750:デフォルトの名無しさん
07/12/26 00:05:43
ツインポインタ
751:デフォルトの名無しさん
07/12/26 00:39:04
ポインポイン
752:デフォルトの名無しさん
07/12/26 00:40:28
ポインティングゥー!ポインタァー!!!
753:デフォルトの名無しさん
07/12/26 02:17:22
日本語でいいだろ。「二次ポインタ 」
754:デフォルトの名無しさん
07/12/26 02:42:06
「ポインタ」も日本語にしろ
755:デフォルトの名無しさん
07/12/26 02:46:15
刺す人
756:デフォルトの名無しさん
07/12/26 02:46:48
そういわれればポインタの日本語訳って見かけないね
イテレータは反復子と訳されるのに
757:デフォルトの名無しさん
07/12/26 02:55:56
じゃ、「二次指示子」
758:デフォルトの名無しさん
07/12/26 19:59:17
ポインタの和訳は…そうだな…「オブジェクトリファレンス」ってのはどうだい?
759:デフォルトの名無しさん
07/12/27 03:35:43
参照じゃねーかw
760:デフォルトの名無しさん
07/12/27 05:40:44
その前に突っ込むところがあるだろw
761:デフォルトの名無しさん
07/12/27 07:59:20
ポインタはウルトラマンセブンに出てくる乗り物だよ
762:デフォルトの名無しさん
07/12/27 13:16:11
ウルトラマンのやつは「ポ↓イ↑ン↑タ↓ー↓」
コンピュータ用語のほうは「ポ↑イ↑ン↓タ↓ー↓」
763:デフォルトの名無しさん
07/12/27 14:43:31
違うだろ。
764:デフォルトの名無しさん
07/12/27 16:35:25
和訳なら矢印だな
765:デフォルトの名無しさん
07/12/27 18:19:45
int *ip
int* ip
ptr<int> ip
1番目より2番目の方が、2番目より3番目の方がわかりやすいと思うんだけどどうよ。
766:デフォルトの名無しさん
07/12/27 18:26:25
どうといわれても
767:デフォルトの名無しさん
07/12/27 18:42:59
ポインタ宣言子と間接参照演算子が別の記号だったら混乱起こさなかったのに。
768:デフォルトの名無しさん
07/12/27 19:10:47
C++のスマートポインタはその点で気が利いてる。
Cだと表現しようがないんだけど。
769:デフォルトの名無しさん
07/12/27 19:54:56
いまさら宣言の記法に注文つけてどうなる。
770:デフォルトの名無しさん
07/12/27 20:27:21
宣言の記法に注文付けたい奴は
typedef int* intptr;
とでもしやがれってんだ。
こんな事してるソース見たことはないが
でもwin32apiのソース読むと
typedefしまくりで、あんぐりする。
771:デフォルトの名無しさん
07/12/27 20:54:56
int* p, q;
772:デフォルトの名無しさん
07/12/27 21:47:44
int q, *p;
これと>>771が等価ってのはひどい。
773:デフォルトの名無しさん
07/12/27 21:47:47
>ポインタのポインタ
ハンドル…。
774:デフォルトの名無しさん
07/12/28 06:51:30
>>773
昔のMac以外にそういう呼び方をする流儀ってあるのか
775:デフォルトの名無しさん
07/12/28 07:22:09
>>774
別に流儀じゃなくて、一つのメモリ管理モデルとしてあるわけで。
(MacOSに影響受けているから当然と言えば当然だけど)PalmOSでもハンドルで管理していたし。
776:デフォルトの名無しさん
07/12/29 12:23:49
string使えはええやん。
777:デフォルトの名無しさん
07/12/29 13:04:32
は?
778:デフォルトの名無しさん
07/12/29 16:26:01
CPUエミュレータ作るとき、関数ポインタの配列を使いまくった。
779:デフォルトの名無しさん
08/01/05 06:19:59
クラスのメンバ関数の宣言にvirtualを使用すると関数ポインタになる件に関して
クラスの変数の初期化が面倒だからmemset(this,NULL,sizeof(*this))でうっかりvirtualを含むクラスを初期化してしまうと実行時エラーにw
780:デフォルトの名無しさん
08/01/05 10:19:27
あたりまえやん
781:デフォルトの名無しさん
08/01/09 01:12:26
>クラスの変数の初期化が面倒だから
そういう用途にはmemset使うなってエロイ人が言ってたよ。
782:デフォルトの名無しさん
08/01/09 19:58:20
memsetなんてもうずーっと使ってないなー
783:デフォルトの名無しさん
08/01/09 20:01:49
>>779
>memset(this,NULL,sizeof(*this))
ここでNULL使うのはおかしくね?
784:デフォルトの名無しさん
08/01/09 22:14:45
そもそもmemset()使うのがおかしいからどうでもいいよ。
785:デフォルトの名無しさん
08/01/09 22:47:58
URLリンク(www.kijineko.co.jp)
>局所変数、特に集成体を宣言した後、実際に必要かどうかに関わらず、必ず memset でゼロクリアする人は大勢います。
>しかし、そんなコードを見かけたら、それを書いた人のコードはすべて疑ってかかった方がよいかもしれません。
786:デフォルトの名無しさん
08/01/09 22:55:34
構造体単体でもmemsetする奴は危険だよ
787:デフォルトの名無しさん
08/01/09 23:03:41
別にmemsetそのものは危険じゃないよ。
788:デフォルトの名無しさん
08/01/09 23:09:05
する奴は
って書いてある
789:デフォルトの名無しさん
08/01/09 23:10:03
うん、そうだね。書いてあるね。
でもそんなことは関係なしにmemsetそのものは危険じゃないよ。
790:デフォルトの名無しさん
08/01/09 23:12:30
ポインタと全然関係ない話題ですねw
791:デフォルトの名無しさん
08/01/09 23:17:06
struct A a;
memset(&a, 0x00, sizeof(struct A));
もう馬鹿かとw
こんな後に
if( a.hoge != NULL)
とかやってる奴ちょっと来い
ぬっこしてやるから
792:デフォルトの名無しさん
08/01/09 23:20:21
勝手にすればぁ~
793:デフォルトの名無しさん
08/01/11 05:16:33
局所変数の初期化って不要なの?
struct {
int a;
int b
int c;
} data;
struct data;
data.a = 0;
とやったとき、bとcには何が入っているのか確定してる?
794:デフォルトの名無しさん
08/01/11 06:47:12
もちろん不定
795:デフォルトの名無しさん
08/01/11 07:40:39
>>793
スレ違い。まぁ、そもそもコンパイル通らないだろうからどうでもいいけど。
796:デフォルトの名無しさん
08/01/11 09:06:04
構造体を初期化するのにmemset()を使わないなら、memset()なんて何に使うのさ?
そもそもゼロクリアなんていらねーよ、って話?
797:デフォルトの名無しさん
08/01/11 10:27:06
>>796
そもそも NULL == アドレス0 って保証はないわけなんだが
798:デフォルトの名無しさん
08/01/11 11:20:52
>>797
メンバにポインタが含まれる構造体の話か。でもそれなら、
struct DATA data[10] = {0};
という書き方も正しい保障は無いということになるよね。どうすりゃいいの?
799:デフォルトの名無しさん
08/01/11 12:05:18
={0} は正しい。memsetでゼロクリアするのとは異なる。
800:デフォルトの名無しさん
08/01/11 12:14:52
>>799
>>797
801:デフォルトの名無しさん
08/01/11 13:42:40
>>800
void *p = 0;
などとしたとき、p はアドレス 0 を指すわけじゃないぞ。
定数 0 は処理系依存のヌルポインタのビットパターンを作り出す。
struct DATA data = {0}; は、構造体 DATA の各メンバを
定数の 0 (ビットパターンが 0 なわけではない) で初期化するから、大丈夫だよ。
802:デフォルトの名無しさん
08/01/11 18:47:35
釣られすぎ
803:デフォルトの名無しさん
08/01/11 22:09:46
なるほど、釣りだったということにしたいわけか
804:デフォルトの名無しさん
08/01/11 22:26:20
ヌルポ インタ
805:デフォルトの名無しさん
08/01/12 00:41:13
>>804
ガッ
806:デフォルトの名無しさん
08/01/14 13:46:21
今はVSでクラスなんかをガシガシ使ってるから使わないけど、
一昔前にUNIXで開発してた頃はstructでデータ構造を設計して、
使用時には
memset(&data, 0x00, sizeof(data));
などのように初期化してから使う、というのが常套句だったよ。俺は。
807:デフォルトの名無しさん
08/01/14 15:09:53
はい、スレの皆さん
新年特別DQN >>806入りました~
かわいがってやってください。w
808:806
08/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));
809:806
08/01/14 17:21:05
>>807
かなりはしょってるが、上のレスのようにやってた。
DQN?俺がDQN?
他人に頼らず、テメーだけの力で批判でも何でもしてみろや。
他力本願な口だけ野郎。
810:デフォルトの名無しさん
08/01/14 17:35:52
コンストラクタで初期化してメンバは隠蔽した方がいいと思う
811:デフォルトの名無しさん
08/01/14 17:53:10
【虎の威を借る狐】
他人の権勢に頼って威張るザコのたとえ
812:デフォルトの名無しさん
08/01/14 18:12:21
>>809
本当にそんな汎用性のないキモイおもちゃ作り
ずっとやってたの?w
取得関数とかクエリ合わせてチューニングも
選択もできねーしこんな設計じゃ拡張性もない
ゴミすぎるだろw?
813:デフォルトの名無しさん
08/01/14 18:24:30
>>806
WindowsAPIのほとんどは今もそうだね
814:デフォルトの名無しさん
08/01/14 18:46:28
>>809
DQNかどうかは兎も角、>808を書いている時点でお郷が知れている。
815:デフォルトの名無しさん
08/01/14 18:53:08
やっぱり>>806は痛い奴だったか
そんな臭いがプンプンしたしなぁ
反論してみ?
816:デフォルトの名無しさん
08/01/14 18:58:26
お前のかあちゃんデベソ
817:デフォルトの名無しさん
08/01/14 18:59:35
きさまっ!いってはならないことをぉおぉぉおおおお
818:デフォルトの名無しさん
08/01/15 00:06:55
環境や用途によってやり方は違うだろうに「キモイ」って評価しちゃう奴はある意味スゲェと思う。
819:デフォルトの名無しさん
08/01/15 00:23:30
>>818
OSS宗教様達は多いよ
リーなんちゃらという変態指導者の
影響だろうけど
自分達の受け入れたくないコード=グロ
って定義だし。
820:デフォルトの名無しさん
08/01/15 00:35:04
実際見たら、グロなんだろ。
821:デフォルトの名無しさん
08/01/15 01:31:10
グロいものほど美味い。これは定説です。
822:デフォルトの名無しさん
08/01/15 07:03:52
ポインタ使った事無いから事故にならなかったんだろ。
こっそりやってるなら、どうせわからないからいいけど、
堂々と自慢されると、やっぱりな、あれだよ・・・
823:796
08/01/15 09:15:50
よーするに、memset()は使い道が無いってことかい?
824:デフォルトの名無しさん
08/01/15 10:40:09
>>823
環境依存でもよくて、標準の真っ当なコードに較べれば多少は速いかもしれないコードを使いたくて、
Intrinsicが用意されていないか使えなくて、インラインアセンブラが用意されていないか使えなくて、
他の手段が見つからないか、過去の遺物を使う為に必要。
825:デフォルトの名無しさん
08/01/15 12:05:51
とりあえず書いとけば誰かが直してくれるさ
826:808
08/01/15 14:26:44
まともな反論は>>812くらいか。
かなりはしょってて共通の関数なんかをすべて省いてるから>>812の感想はもっともだけど、
実際の事務処理アプリの現場ではその「キモイおもちゃ作り」とやらが蔓延していたのもまた
事実としてあるんだから、自分だけ高みから見下して一蹴してしまうすような>>812は、俺には
少し世間知らずに見えてしまうな。
>>815
「やっぱり」ってなんだ?
テメーで反論せずに誰かに反論してもらって「やっぱり」って思ったの?
まさに>>811に出てる「虎の威を借る狐」=ザコだなお前。
あと「反論してみ?」って見下してるけど、テメーは何も言ってないよねw
なんなんだお前は~w
827:デフォルトの名無しさん
08/01/15 14:27:45
こんなネタで盛り上がれるお前らの時間の贅沢な使い方に脱糞
828:808
08/01/15 14:31:40
このスレ、極少数は経験も知識も豊富っぽいのがいるかも知れないけど、
その他はザコばっかだね。しかも性格が悪すぎ。
>>806に対しての>>807は何だ。
知識も経験もないけど一方的に悪口言ってストレス解消ですか?
反論したいならテメーでしろ。
できないなら実のある話しろやボケ。
だから過疎るんだよこの板。
829:デフォルトの名無しさん
08/01/15 14:33:00
うん。
830:デフォルトの名無しさん
08/01/15 15:49:25
血圧が高いんじゃない?
高血圧は万病の元だよ。
まじで心配
831:デフォルトの名無しさん
08/01/15 17:50:03
>>828
で、ちみはポインタの何がわからなくて躓いてるんだ?
832:デフォルトの名無しさん
08/01/15 18:12:13
ポインタとmemsetって関係なくね?
833:デフォルトの名無しさん
08/01/15 18:19:10
もとは、ポインタをビットパターン0にしちゃだめだろ、って話だったけどな。
834:デフォルトの名無しさん
08/01/15 19:26:38
>>810といい、>>816と>>817の自作自演といい、ガキが多いのは感じる
ゆとりって言葉は嫌いだけどつい使ってしまいそうな程
835:デフォルトの名無しさん
08/01/15 19:31:55
memsetの話出てからこのスレつまんなくなった
836:デフォルトの名無しさん
08/01/15 19:48:20
どこまで行けば面白くなるのか遡ってみたら>>1に到達してしまった
837:デフォルトの名無しさん
08/01/15 19:51:28
>>834とか>>828あたりで十分面白いだろ。
838:デフォルトの名無しさん
08/01/15 21:15:09
結局memsetで初期化することの問題点は、
浮動小数点数やポインタの内部表現が環境依存であるから
0.0やNULLに初期化されるとは限らないということだけ?
839:デフォルトの名無しさん
08/01/15 22:02:23
>>838 そだよ
つか, memset なんて組み込みやるときの bss の初期化にしか使った事ねぇし…
840:デフォルトの名無しさん
08/01/16 12:36:15
某A賞のシステムでもそんなの誰も気にせずmemsetしてるけどな
841:デフォルトの名無しさん
08/01/16 13:14:03
Cでgotoは絶対に使ってはいけない、という神話に似てる
842:デフォルトの名無しさん
08/01/16 13:51:46
>>835-837
m9(・∀・)自作自演だろ!!
違うかな?
たぶん>>816-817と同一人物と見た。もしこの推測が合っていたら、
おまいは姑息で卑怯なこざかしい人ですね
843:デフォルトの名無しさん
08/01/16 14:04:59
まじで病院行け。
844:デフォルトの名無しさん
08/01/16 14:44:02
835は俺です
他は違います
845:デフォルトの名無しさん
08/01/16 15:18:02
頭のおかしい人にマジレスしてもw
846:デフォルトの名無しさん
08/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::::::ヽ
847:デフォルトの名無しさん
08/01/18 13:58:42
ぴぴるぴるぴるぴぴるぴ~
848:デフォルトの名無しさん
08/01/18 16:55:30
memsetだってwin32api使ってたらよく使うし
まぁ、ようは、どんな関数でも使う奴しだいだろ
849:デフォルトの名無しさん
08/01/18 22:05:01
ほとんど見かけないようなプラットフォーム向けにも移植性を確保しておきたいかどうかだな
zlibみたいなライブラリではそうする価値があるかもしれないが、俺が書くようなコードではどうでもいい…
850:デフォルトの名無しさん
08/01/18 22:27:36
>>849
スピード命のコードだと, 内周ループで数エントリの構造体を
memset するのってやたらコストがでかい。
実際には、サブルーチンコールのオーバーヘッドがでかいんだが…
去年 MPEG 関連の仕事を途中から引き継いだんだけど、とろくって
使い物にならなかった元のコードの memset を代入文に変えただけ
で実行時間 60% 程度まで短くなった。
851:デフォルトの名無しさん
08/01/18 22:35:04
それは使っているコンパイラが悪いような希ガス。
852:デフォルトの名無しさん
08/01/18 22:35:30
>>850
memset初期化を使うのは、システム起動時か、再起動時でしょ。
あとはオブジェクトが生成されたときとか。
頻繁に生成、破棄を繰り返すようなオブジェクトで、システム上重要な
パフォーマンスに影響をあたえるものにたいして、memset初期化をするかしないか
というのは「高速化」の話。memset初期化のよしあしの話ではない。
853:デフォルトの名無しさん
08/01/18 22:35:42
>>850
まぁそれはまた別の話かと
854:デフォルトの名無しさん
08/01/18 22:54:00
>>851
それは言えてるんだが、組み込み物ではコンパイラの選択肢は限られる。
ましてや、クライアント指定のコンパイラだ
>>852
> システム上重要なパフォーマンスに影響をあたえるもの
に、対して memset で初期化しておいて、直後にその大半を意味のある
値で再度上書きしてた。
> よしあしの話ではない。
かもしれないが、元のコードを書いた奴の神経をうたがったわな。
855:デフォルトの名無しさん
08/01/18 22:57:38
Win32APIみたいに設定項目が山のようにあり、
常に全部を使うわけでもなく、
0で埋められる項目の頻度が高ければ十分ありだろ。
C/C++以外では今時クラスインスタンス0フィルされる言語も珍しくもないし。
ケースを指定するでもなく一般論としてあーだこーだいってる奴はアフォ。
856:デフォルトの名無しさん
08/01/18 23:11:50
>>855
いいえ。
高が、struct someStruct foo = {0} で済むことのためにmemset()を使う必然性は殆どありませんね。
それがstruct someStruct * foo = malloc(sizeof(* foo))した領域でも同じこと。
857:デフォルトの名無しさん
08/01/18 23:29:25
memset使わないで
struct someStruct * foo
何か処理
foo = {0};って感じでまた初期化すればいいだけ
memset使うやつは馬鹿今の公開されている
まともなソースでmemset使ってるのコードは皆無だぞ?
858:デフォルトの名無しさん
08/01/18 23:31:27
>>857
>foo = {0};
それ無理じゃね
859:デフォルトの名無しさん
08/01/18 23:38:01
0fillがいかんからmemsetがいかんに話がずれてきてるな
860:デフォルトの名無しさん
08/01/18 23:38:59
パフォーマンスだけに限って言うと、memsetをインライン展開するコンパイラなら使う事もある。
861:デフォルトの名無しさん
08/01/18 23:50:15
>高が、struct someStruct foo = {0} で済むことのため
宣言と同時に初期化しない場合はどうするの?
というよりこれってコンパイラ依存なんじゃないの?
862:デフォルトの名無しさん
08/01/18 23:51:49
memsetは危険だから使うなって
manとかMSDNに記述あるんだな
863:デフォルトの名無しさん
08/01/18 23:54:46
>>862
具体的に書いてくれ。調べるの面倒
864:デフォルトの名無しさん
08/01/18 23:55:37
お前は何を言っているんだ
865:デフォルトの名無しさん
08/01/19 00:05:01
manページより:
>説明
>memset() は s で示されるメモリ領域の先頭から n バイトを c で埋める。
>返り値
>memset() は s へのポインタを返す。
>準拠
>SVr4, 4.3BSD, C89, C99, POSIX.1-2001.
俺の目がおかしいのかもしれないが危険性がどこにもみつけられない。
MSDNとか読むきしないから他のヤツよろしく。
866:デフォルトの名無しさん
08/01/19 00:09:13
>memset() は s で示されるメモリ領域の先頭から n バイトを c で埋める。
これは嘘だろw
nバイトをcで埋める可能性もあるが正解
867:デフォルトの名無しさん
08/01/19 00:10:50
>>866
日本語でおk
868:デフォルトの名無しさん
08/01/19 00:13:06
冬 真 っ 盛 り
869:デフォルトの名無しさん
08/01/19 00:15:43
埋めない可能性もあるのか?
まぁSEGVるかもしれんが
870:デフォルトの名無しさん
08/01/19 00:18:25
>>869
>まぁSEGVるかもしれんが
>>866がそんなことで「埋めない可能性がある」とかバカなこというわけないじゃないか。
>>866は、きっともっと違った根拠があっていってるのだよ。
871:デフォルトの名無しさん
08/01/19 00:19:58
ECCメモリを使っていない場合に起こるのかもしれないなw
872:デフォルトの名無しさん
08/01/19 00:27:17
>>871
ワロスwww
その「可能性」言い出したら、マニュアルなんて書けない気がするがwww
873:デフォルトの名無しさん
08/01/19 00:28:46
釣り堀だなw
874:デフォルトの名無しさん
08/01/19 00:35:45
>>867-873
こんなに釣れた
875:デフォルトの名無しさん
08/01/19 00:40:41
>>874
トイウコトニシタイノデスネ
876:デフォルトの名無しさん
08/01/19 12:18:16
struct someStruct foo = {0}
これはできるけど、動的確保した構造体だと無理じゃね?
877:デフォルトの名無しさん
08/01/19 12:21:34
>>876
C99は可能
お前あほ杉w
878:デフォルトの名無しさん
08/01/19 14:00:41
>>876
struct someStruct * foo = malloc(sizeof(* foo));
struct someStruct blank = {0};
* foo = blank;
よほど気の利かないコンパイラでもなければ、blankの実態は作られない。
879:デフォルトの名無しさん
08/01/19 14:06:25
なんと言う糞コードというか糞スレ・・・
880:デフォルトの名無しさん
08/01/19 14:14:39
>struct someStruct blank = {0};
こんなコンパイラがサポートしている「かもしれない」機能を
「使わないのはおかしい」と主張されてもな。
881:デフォルトの名無しさん
08/01/19 14:20:18
>コンパイラがサポートしている「かもしれない」機能
そうなの?
882:デフォルトの名無しさん
08/01/19 14:21:52
>>880
サポートしていないコンパイラをご存知ならご提示くださいませ。
以後規格外品として、広く存在を知らしめてまいりたいと思いますので。
883:デフォルトの名無しさん
08/01/19 14:22:15
>>881
そうだよ
884:デフォルトの名無しさん
08/01/19 14:23:16
>>882
むかし使ってた、ARMの純正コンパイラではサポートされてなかったな。
885:デフォルトの名無しさん
08/01/19 14:23:35
>>882
組み込み業界じゃザラにあるが…
886:デフォルトの名無しさん
08/01/19 14:24:52
もし論点があってそれを覚えているのなら3行にまとめてくれたまへ
887:デフォルトの名無しさん
08/01/19 14:26:15
つまり、昔のARM純正コンパイラは構造体の初期化ができないと?
888:デフォルトの名無しさん
08/01/19 14:26:47
>>884, 885
つか、>>882 は「Cが処理系に依存しない高級言語だ」って
思ってる可愛そうな奴なんだよ
889:デフォルトの名無しさん
08/01/19 14:28:01
>>887
いや、全部のメンバに代入すればOK
struct A {
int a;
int b;
};
OK:struct A a = {0, 0};
NG:struct A a = {0};
890:デフォルトの名無しさん
08/01/19 15:42:06
お前らまずは日本語を学べ
スレタイが読めるようになったらまた来い
891:デフォルトの名無しさん
08/01/19 19:37:52
ポインタは友達!
892:デフォルトの名無しさん
08/01/19 21:53:40
ポインタ「げ。また>>891だよ・・・マジウザイ・・・
893:デフォルトの名無しさん
08/01/20 01:38:56
ひでえw
894:デフォルトの名無しさん
08/01/20 20:51:06
昔記事を見て馬鹿にしてた教材が一番わかりやすかった
895:デフォルトの名無しさん
08/01/20 22:18:11
memsetを使う利点は使い方によっては構造体の初期化のソースを短く出来る事かな
巨大な行列を持つ構造体を初期化するとか普通に代入でまかなうとマジで馬鹿にならないくらいソースが膨らむから
ループで回して初期化するのも遅いしな
896:デフォルトの名無しさん
08/01/21 00:52:45
Cプログラマ必須テキストです!
URLリンク(mori.eco.to)
897:デフォルトの名無しさん
08/01/21 01:23:47
>>896
どうでもいいのだが・・・
>当然ですが、あらゆる標準関数の使用を認めません。
>
>・strlen() を自作せよ。
>・strcat() を自作せよ。
標準関数の使用を認めないくらいなら、strlenとかstrcatとかキケンな
関数じゃなくて、ふつうはもっと安全な代替関数を自作するでしょ。
898:デフォルトの名無しさん
08/01/21 02:16:15
>>896
>C++未経験ながら、1人でC++の10万行のソースコードの保守及び、3万行の開発を行った。
これ単にCとして使ったとかじゃ
899:デフォルトの名無しさん
08/01/21 02:38:15
いまどき行数で規模示すなんて
クラス数と各クラスのメソッド数で競ってくれ
っつーかすれ違いか
900:デフォルトの名無しさん
08/01/21 02:57:11
競うなよ。どっちも少なければ少ないほど良い。
901:デフォルトの名無しさん
08/01/21 05:07:32
さすがにクラスは適切な数ってのがあるだろうな。
902:デフォルトの名無しさん
08/01/21 11:28:41
>>896は宣伝でマルチしてるから無視すべし
903:デフォルトの名無しさん
08/01/21 17:02:57
PIC等の単純なCPUで機械語でもやってアドレッシングモードを習えば
ポインタは理解出来るんじゃね? 余計に混乱するかな?
904:デフォルトの名無しさん
08/01/21 18:50:37
PICとかアドレッシングモードとかわけわかめなんだけどどうすれば習えるの?
905:デフォルトの名無しさん
08/01/21 19:33:40
PICは余計なところが気になりすぎ、16ビット以上推奨だな。
AVRとかHC08とかARMがいいんじゃね?
あと、アセンブラのアドレスはせいぜい指してる先のバイト数
の情報くらいしか持ってないから、ポインタまでには、まだまだ
壁があるのでよろしく。
906:デフォルトの名無しさん
08/01/21 20:47:32
>>895
おれは構造体を定義したら、必ずその初期化関数を作るけどな。
だからソースはさほど膨らまない。
まあその関数の中でmemsetをやっている場合もあるんだが、
それでも素のmemsetは使わないな。
907:デフォルトの名無しさん
08/01/21 21:43:28
動的にその行列のサイズが変わる、その平均が100X100から1000X1000近くになって
最悪5千近くなる行列は動的に変わるんで代入じゃ無理だし、ループでまわして初期化するよりはmemset使った方が速度は確保できるし
何が糞なんだかなぁと思うわw
まあ、動的に確保して中身をゼロクリアしたいのならcalloc使えって話だけどなw
しかし、途中で初期化したくなったらmemsetかな?
908:デフォルトの名無しさん
08/01/21 22:09:00
>>905
> あと、アセンブラのアドレスはせいぜい指してる先のバイト数
> の情報くらいしか持ってないから
TRON chip を否定したな!WwwWW
909:デフォルトの名無しさん
08/01/21 22:47:17
>>908
> TRON chip を否定したな!WwwWW
は? TRON Chipのポインタも、持ってる情報はアドレスだけですが?
ポインタに情報を持たせるのはLisp処理系とかで、ワードアラインの都合で
使わない下2bitに型の情報を入れ込んだりとか、アドレスが24ビットだった
68000用のやっぱりLisp処理系で上8bitに型の情報を入れたり、とか。
ポインタが本格的に(?)型の情報を持ってるアーキテクチャったらIBMの
System/38→AS/400とかだろ。
910:デフォルトの名無しさん
08/01/21 23:12:54
>>909
ショボいCPU使ってプログラムを作ると自分でポインタを作って管理しなきゃいけなくなるよ。
それでポインタがマスター出来るだろうと思う。
911:デフォルトの名無しさん
08/01/22 01:11:14
>>907
そういう0クリアする必要があるときのmemsetには、誰も異論を唱えていない。
912:デフォルトの名無しさん
08/01/22 01:16:18
>>907
それやるとどこか1バイトだけ
初期化されず危険というコンパイラもある
913:デフォルトの名無しさん
08/01/22 01:24:46
>>912
「そうする機能を持つ」ということと、「バグでその機能が働かない」というのを
ごっちゃにすると、ワケワカンナクなるからやめようぜ。