1 :
デフォルトの名無しさん :
2006/02/27(月) 17:16:02 死ね。氏ねじゃなくて、死ね。
>>1 そうしたら現代のコンピュータを全て否定することになるがそれでもよいのか。
ポインタがツンデレだという事実を なぜわからない!
ツンデレか! よし、頑張るよ。
時空警察に通報しといた
7 :
デフォルトの名無しさん :2006/02/27(月) 23:12:30
ヨドバシカメラでたまる
8 :
デフォルトの名無しさん :2006/02/27(月) 23:13:15
それ、ポイント
9 :
デフォルトの名無しさん :2006/02/27(月) 23:13:54
自演乙
10 :
デフォルトの名無しさん :2006/02/27(月) 23:14:19
自演じゃねーYO!
11 :
デフォルトの名無しさん :2006/02/27(月) 23:15:04
12 :
デフォルトの名無しさん :2006/02/27(月) 23:16:02
はいはいワロスワロス
VIPに帰れ
14 :
デフォルトの名無しさん :2006/02/27(月) 23:16:40
ポイントじゃなくて、ポインヨ
↓ツンデレなポインタが一言
Segmentation Fault
17 :
デフォルトの名無しさん :2006/02/28(火) 01:46:19
Javaは糞
もう少し親しくならないとダメみたい
ポインタを萌え擬人化でもしてくれれば勉強する気になるのに
20 :
1 :2006/02/28(火) 11:37:28
すいません。自己解決しました。 もう書き込まないでいいです。
21 :
デフォルトの名無しさん :2006/03/01(水) 00:48:58
じゃあ私が変数xを指定してあげるから・・・ べ、別にあんたのためじゃないからねっ!仕事だからよ!仕事!!
な、何もあんたのために参照してあげてるわけじゃないんだからね! cloneとか、自分でやってよね!
たまには私の事思い出してよね… べ、別にガベージコレクトなんてどうでもいいんだから! スマートポインタなんて知らないっ
24 :
デフォルトの名無しさん :2006/03/01(水) 13:58:07
ぬるポインタを例外にするなんて、ひどすぎ! 信者絵!
25 :
デフォルトの名無しさん :2006/03/01(水) 14:12:47
26 :
* :2006/03/01(水) 15:29:49
私は毎日怯えています。
マウスポインタもポインタである
28 :
デフォルトの名無しさん :2006/03/01(水) 17:11:41
C言語のポインタの定義ってさ、 なんで int *p; みたいに「ポインタ用int」みたいなもの定義しなくちゃいけないの? 普通にintにポインタの番号は格納できんのか?
レーザーポインタもポインタである。
ウルトラ警備隊の車もポインターである。
星野流宇はボインダーである。
>>28 日本語でおk
30 :
デフォルトの名無しさん :2006/03/01(水) 17:20:41
>>28 つりにマジレスすると、
> 「ポインタ用int」
と思ってる時点で理解できてない
32 :
デフォルトの名無しさん :2006/03/01(水) 17:29:55
分かった。ポインタなんだな。
どこのスレ高忘れたけど CのポインタよりもPerlのポインタのほうが わかりやすいってスレがあった。 あれみたら確かにPerlのほうがわかりやすい。
34 :
* :2006/03/01(水) 19:09:49
私はただアドレスを覚えているだけなんです。そのほかのことは知りません。
35 :
デフォルトの名無しさん :2006/03/01(水) 19:12:03
ツンデレじゃないじゃないじゃないじゃない
*(・ω・` )
*(・ω・` )∀・)
int ***************** p;
(int*´д`*)アハァ…
40 :
デフォルトの名無しさん :2006/03/01(水) 21:22:07
ポインタとは人間がこれはポインタとして使う と決めて使うのであれば何であってもポインタ となる。だから言語でポインタがサポートされて いなくてもポインタを作ることは可能だ。実体が 無く何かを指し示すものがポインタだからだ。
死ぬなポンタ
ポインタ理解してもC言語にはもっと難しいこといっぱいだけどな
ポインタのポインタ
44 :
デフォルトの名無しさん :2006/03/02(木) 00:16:23
char *ptr[255]は 255個のcharの配列へのポインタだっけ? charへのポインタの255個の配列だっけ? ちなみに前者だったとして、使い道としてはchar*なんだけど要素が255個のchar配列限定。と考えてよいですか? たとえば、void func(char *p[255])ってやって、 int main() { char array1[255]; func(array1); ←OK char array2[10]; func(array2); ←おこられる。 } 見たいな感じになってくれるんでしたっけ?
>>44 char *(ptr[255])と解釈されるので後者。
char (*ptr)[255]と書けば前者として解釈される。
後半のことはvoid func(char (*p)[255]);と読めば大体あっている。
正しくはこうしなければならない。
char array1[255];
func(&array1);
typedef char T[255];とすれば、
char *p[255]はT *p;と同じになり、char array1[255];はT array1;になるので、
func(&array1);と言う風に&演算子を使う必要があるんだという説明で納得できる?
>>45 すんばらしい。。
ありがとう(* ´д`*)
ポインタが理解できないという脳みその構造の方が理解できない ポインタだけで本一冊書いちゃうライターさん引っ張るのうますぎ
ポインタ使えなくなったら困るぜ。 ポインタ=メモリへのアドレス それだけさw。
ポインタ理解出来ない馬鹿は腹筋100回な。 俺はもうすませた。
50 :
デフォルトの名無しさん :2006/03/02(木) 14:46:10
腹筋100回できないバカは何を100回やればいいのでしょうか?
ポインタの冒険というくだらない RPGツクールで作られたRPGを思い出した。 マウスカーソルが主人公でWindowsデスクトップ上の ウィルスを駆除するというだけの単純な奴
気になったのでDLした いまからPLAYする
発想は面白いと思ったけど 無駄な動きが多くて飽きてくるかもしれん。 作者は当時学生だったと思った。
54 :
デフォルトの名無しさん :2006/03/02(木) 19:10:42
何気におもろいスレだなここww
**********************************p この'*'ってどこまでつけてOKなんだろ? 実際問題3つ以上つけたことないけど
56 :
デフォルトの名無しさん :2006/03/02(木) 19:28:24
>>55 echo "int main(){int " > ptr.c
yes "*" >> ptr.c
echo "p;return 0;}" >> ptr.c
^C
gcc ptr.c
とやるとメモリ使用量がGByte単位でふくれあがった後コンパイラが落ちた。
ギガワロスwwww
w
VC++ 6.0 でやってみた。 1010個まではコンパイル出来るが、1011個だと fatal error C1026: プログラムの解析に必要なスペ-スが、コンパイラ内でスタック オ-バ-フロ-を起こしました。 だって。
日本語で言うと ポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタの ポインタのポインタのポインタのポインタのポインタのポインタの・・・・・・・・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・(ρw-).。o○
>>55 一応 C++ では規格に「実装は最低限ここまで対応しろ」という
基準が示されています.
Pointer, array, and function declarators (in any combination)
modifying an arithmetic, structure, union, or incomplete type
in a declaration [256].
256 までは対応してないといけません.それ以上は実装の裁量次第かと.
62 :
61 :2006/03/02(木) 20:36:28
あ,ちょっと間違い. 256 という数字はあくまで最低限満たすべき 数値として「推奨される値」でした.すいません.
63 :
デフォルトの名無しさん :2006/03/02(木) 20:37:40
うむ、そのとうり
64 :
デフォルトの名無しさん :2006/03/02(木) 20:38:52
win2kのcygwin gccだと*の数で落ち方が違った。 1,968,402個以下でコンパイル成功。 1,968,403個以上で失敗、stackdumpを吐いて倒れた。 8,000,000個だとout of memory allocatingとメッセージをだして終了だった。 1,968,402境界の原因はメモリ不足ではなさげ。ほかのアプリを閉じてからやっても同じ結果だった。 暇人とか言わないでください。
65 :
デフォルトの名無しさん :2006/03/02(木) 21:07:38
>>1 に激しく同意
おれの VC++ 代(VIC カメラのポイントで払った)どうしてくれるんだ
BIC だったウ濁音氏ね
なんか話がズレてきてる
>>28 マジレスすると演算子の結合優先度は
int (*p);
ではなく
(int *) p;
「int型へのポインタ」という型になる。
ポインタのポインタって表現は違和感あるな。 ポインタへのポインタならわかるんだが。
70 :
デフォルトの名無しさん :2006/03/02(木) 23:05:37
>>68 SUGEEEEEEEEEEEEEEEEEEEE
WKARIYASUUUUUUUUUUUUUUUUUUU
void A( unko u ) { } void main() { unko& u; A( u ); return; }
>>68 > (int *) p;
ちがうとおもう
73 :
デフォルトの名無しさん :2006/03/03(金) 00:48:06
CHIGAUNOKAAAAAAAAAAAAAAAAAAAAAAA
意味はそれでいい気がするけど int *p, q, r ってやったらpだけポインタ
int* p, q, r だろうがpだけポインタだった希ガス
typedef int* PINT にすると分かりやすい。
ポインタと結婚したいです><
ポインタはボインだ という俺の妄想
ワロタwww
80 :
デフォルトの名無しさん :2006/03/03(金) 02:05:12
ツルペタロリツンデレじゃなきゃやだやだやだぁ
ツンデレはなんか納得できるw
金髪ツインテール14歳の大人なツンデレが好きです。
83 :
デフォルトの名無しさん :2006/03/03(金) 04:23:59
( * )´・ω・`)
ゲッタードリル! ( `Д´)≫* )´・ω・`)
85 :
デフォルトの名無しさん :2006/03/03(金) 22:17:02
ぽいたん萌え
86 :
デフォルトの名無しさん :2006/03/03(金) 22:56:39
ポインタかわいいよポインタ
int* a,b; で両方ともint型ポインタに成らないのがマジむかつくんですが。
>>87 typedef int* PINT;
PINT a, b;
89 :
87 :2006/03/03(金) 23:17:11
そのようにtypedefすれば出来る仕様が余計に腹立たしいのですが
>>89 ではどのようにtypedefすればできる仕様ならよいでしょうか。
たとえば
tempate<typename T>
class type
{
typedef T type;
};
typedef type<int*>::type PINT;
C++/CLI なら String^ a, b; で通るはず
要するに (p)←*pのアドレス入り ↓ (*p)←計算とかで使うの数値入り って事?
93 :
デフォルトの名無しさん :2006/03/04(土) 01:50:06
ポインタをコールバック関数に使うあたりで、華麗すぎて 俺には向かないと思ったんだけど・・・昔はアセンブラで間接技を 使って一本とっていたので、あれとおんなじと判ったとき, 目からうころがとまれした。
とまれした とれました? どっちにしろうろこは落ちる物です 無知を晒して本当にありがとうございました
目からうろこが落ちたと思ったらコンタクトレンズでした
角膜おとしちゃった、テヘッ
ごめん、踏んじゃった。
このスレ怖いよ
怖くなんか無いよ
俺なんかレーシックやったから角膜削れてるもんね。
ぽいんつさんのブログという 女エンジニアだか女ソフトウェア研究者の ブログを思い出した。 Javaを使いこなしてるらしい。
103 :
デフォルトの名無しさん :2006/03/04(土) 16:04:33
104 :
デフォルトの名無しさん :2006/03/04(土) 23:42:36
ポインタから参照に代えると何が改善しますか?
参照はNULLが無効 オーバーロード引数問題の解決 誤ってdeleteさせない
106 :
デフォルトの名無しさん :2006/03/04(土) 23:50:28
僕これから参照派になります^^
こもヘタレがぁ!
C++の参照なら参照先を変更できないって違いが大きいかな。
109 :
デフォルトの名無しさん :2006/03/05(日) 00:03:05
そこだけ呼び出しもととスコープが繋がってるイメージですか?
で、C++の参照を使うべきだって思ったことあるかい? 自分の使っているライブラリの仕様で 参照を使えって指定されている場合を除く。
>>110 演算子多重定義。
構造体・クラスの値渡し・constポインタ渡しの代わりにconst参照。
ない
参照は、クラスの実体渡しを実現させただけ。
ある
参照先を変えたくないときに使うな。わざわざconstポインタ使うのもめんどいし。
てゆーか俺最強だし
最近、アドレスについてあんまり理解しなくても/教えなくてもポインタについてはわかる/説明できるんじゃないかと思えるようになってきた今日この頃
>最近、……今日この頃
119 :
デフォルトの名無しさん :2006/03/05(日) 13:02:03
ポインタでは限界で参照だと解決とかな事例は?
普通に演算子オーバーロードはポインタでは限界だと思うが
演算子オーバーロードは言語構文でそうなっているだけ。 演算子オーバーロードが実行時に参照を使って何かにアクセスするわけじゃないし。
話がかみ合ってねぇ〜
>>119 はなにがいいたいんだ?
むしろ、C++の参照では限界でC++のポインタで解決だという事例は? あー。メモリ内容ぶっ壊すようなマイナス的なものは除く。
うるせーな 早くポインタ殺せ
現在多く使われている言語では どれもC++のポインタは死んでいる。
ポインタがなにしたっていうんだ メモリを壊すのはポインタじゃなくてたいていは代入だ 殺すなら代入を殺せ
代入先に不正なメモリをさすことが出来るのが そもそもの原因だ。ポインタを殺せ。
>>121 参照は演算子オーバーロードのために導入したとビョーン先生が言ってる
プレステのゲーム作ってたときなんかは、固定長のデータが詰まった バイナリファイルをCDからガツンと読み込んで、その先頭アドレスを 構造体ポインタにキャストしてデータとして使っていたが、 その手の手法は「参照」じゃ_。
危険なことができるってことはその分柔軟なこともできるってこった 安全を求めたらできることは段々少なくなってくる 世の中こんなもんだろう
ポインタを使わないプログラミングなんて ゴム越しにセクースするようなものだ。
132 :
129 :2006/03/05(日) 20:49:51
そもそもポインタをアドレス格納用変数といっとるやつは アドレスとポインタの違いを説明できんのか?
ポインタはアドレスをポイントする
ぬるぽ
>>129 struct hoge {/* 〜 */};
void *p = ガツン;
hoge& hoge = *static_cast<hoge*>(p);
まあ褒められたことではないし、おとなしくポインタを使うべきだと思うけど。
ポインタの為なら死ねる!><
137 :
デフォルトの名無しさん :2006/03/06(月) 03:36:30
>>131 巧い!
安全だけどいまいっぽ気持よくない
馬鹿野郎! ゴムつけないと早すぎちゃうでしょ><
>>129 発想を逆転して、参照が示す先に
データをロードすれば良いだけ。
141 :
デフォルトの名無しさん :2006/03/07(火) 02:07:42
ポインタをアドレス格納用変数だと思ってる俺を諭してくれ。
ポインタはポインタでしかない。 いいからアセンブっとけ
単にアドレスだと思ってしまうと、++したり、引き算したときに、はまる NULLの内部表現が0でないマシンで、memset(...0...)したときに、はまる かもな
144 :
デフォルトの名無しさん :2006/03/07(火) 10:41:17
だってアドレスの値が入ってるじゃん!!!1
>単にアドレスだと思ってしまうと、++したり、引き算したときに、はまる はまんねーっていうかいったいどんな初心者想定して話してんだよw
146 :
デフォルトの名無しさん :2006/03/07(火) 13:17:24
寧ろアセンブリに精通した人が++に混乱を生じるのでは? ポインタだと必要サイズ分だけ移動だけど アセンブリだと単純に次のアドレスでしょ?
つまりはポインタの正しいイメージを頭に描いていれば 文法的知識があやふやでも正しくコーディングできるということか。 正 直 ど う で も い い
148 :
デフォルトの名無しさん :2006/03/07(火) 21:44:09
ポインタはアドレスを格納してる変数なんだけど、 「++」や「--」などの演算をした時は、 普通の整数などと「++」「--」の動作が違って、「必要サイズ分移動」という命令になる 整数等向けの「++」「--」と、ポインタ向けの「++」「--」は別の処理だ っていう解釈でOK?
>>148 変に勘ぐりすぎ。ポインタのインクリメントは、単に指す場所が一つずれるだけ。
そのときに実際のアドレスがどうなっているかは意識する必要がない。
150 :
デフォルトの名無しさん :2006/03/07(火) 21:54:54
>>148 ていうか、まさに、ポインタの内容が、インクリメント/デクリメントするんだから、普通の整数と同じよん。
"char" と "char *" は大きさが違うってこと。
151 :
150 :2006/03/07(火) 21:59:53
ごめん、全然説明になってないorz 使いこなせているのに、人に説明するのは難しいorz
_____ / ̄ ̄ ̄ ̄\,, /−、 −、 \ /_____ ヽ / | ・|・ | 、 \ | ─ 、 ─ 、 ヽ | | / / `-●−′ \ ヽ | ・|・ |─ |___/ |/ ── | ── ヽ | |` - c`─ ′ 6 l |. ── | ── | | . ヽ (____ ,-′ | ── | ── | l ヽ ___ /ヽ ヽ (__|____ / / / |/\/ l ^ヽ \ / / | | | | l━━(t)━━━━┥ _____ / ̄ ̄ ̄ ̄\,, / \ /_____ ヽ / ______ \ | | | / / \ ヽ |,,_ _, |___/ |/ ,,_ _, ヽ | | "゚'` } "゚` 6 l | "゚'` } "゚` | | フッ ヽ __''_, ,-′ フッ | __''_, | l ヽ. ー__ /ヽ ヽ ー / / / |/\/ l ^ヽ \ / / | | | | l━━(t)━━━━
153 :
デフォルトの名無しさん :2006/03/08(水) 00:29:09
自分がポインタ理解できてるか不安です><
ポインタのマスコットキャラクター:ポインたん 誰かデザインして
ポインタなんか無くして、配列だけにしてptr[i++]とすれば、だれもアドレスが一つ増えるとは思わなく、 ptr配列の現在の項目・・・の次の項目を取得するとちゃんとわかっただろうね。
>>155 はぁ?
ポインタも long *lptr; lptr++; とかやれば、アドレスは4進むけど、配列の次の要素に移るけど?
だから、配列と機能が被るんだから、配列一本にすればよかったんだよ。 それとか、ポインタは配列の次の要素に進むのと同じ動きをしますと説明するとかさ。
long *lptr; lptr++を実行すると、long型の配列の現在の要素の次の要素に移ります。
159 :
デフォルトの名無しさん :2006/03/08(水) 04:52:43
デザインが悪かったってことだ。実際、バッファオーバーフローに 何十万人のプログラマーが苦しんだ (楽しんだ) ことか。。。
ポインタができないとJavaもできないだろ
次のC--言語でポインタなくして、 メモリ全体を表す_MEMORYって配列を用意することにしよう
ポインタなんかなくても困らないだろ ポインタなんて概念のある言語は糞
もうちょっと気のきいた餌きぼん
ポインタなんか生で使えなくても困らないだろ。 ポインタを生で使える概念のある言語は糞。
>>159 バッファオーバーフローはコード書いた奴が阿呆なだけで
ポインタとは関係ないですね。
>>157 原理主義者の間では、*ptr と ptr[0] は違うものとして認識されます。
167 :
デフォルトの名無しさん :2006/03/08(水) 14:37:06
C言語@はじめてのCプログラミングには同じだって書いてありました!!!!111
ポインタなんて、pointer[integer] ≡ *(pointer + integer)だって判ればそれで充分だろ。 *ptrは要は、*(ptr + 0)なんだからptr[0]に決まっているじゃないか。
>>166 どこの原理主義者だか知らんけどただの半端もんじゃん
170 :
デフォルトの名無しさん :2006/03/08(水) 16:50:46
>>171 全然。配列的に扱わない場合は参照を使うし。
K&Rに異議を唱えるなんてとんだ原理主義者だな
174 :
デフォルトの名無しさん :2006/03/08(水) 19:20:22
ポインタと配列の違いがよくわかりません
関数ポインタがないと困る
176 :
デフォルトの名無しさん :2006/03/08(水) 23:45:27
先輩がポインタのポインタって真顔で俺に真剣に説明してた時 「おまえって報われない性格だろ?」ってさりげなく思った 会社かわわっちまったけどどうしてるかなT先輩
177 :
デフォルトの名無しさん :2006/03/08(水) 23:56:11
ボイン
178 :
デフォルトの名無しさん :2006/03/09(木) 00:43:15
ちゃん
いや、ポインタと配列のアドレスは違うものだろ。 char *ptr = new char[SIZE]; として生成されたものは、 delete [] ptr; としないと、実行時エラーになるからな。
>>179 いえ、そういう違いではなくて
void func( char *p, char a[256] )
{
...
}
のポインタpと配列aはなにが違いますか?
181 :
デフォルトの名無しさん :2006/03/09(木) 04:15:07
全然違う
全く同じ
183 :
デフォルトの名無しさん :2006/03/09(木) 06:21:14
ヌルポインタをintにキャストしたとすれば、それは0ですか?
>>179 「アドレスが違う」せいではない
それは、operator new[] の第1引数に渡される値が単に
要素数に比例するわけではなく、不定であることと同じ理由だ
全くいい加減なことをいう奴が多いな
186 :
デフォルトの名無しさん :2006/03/09(木) 06:36:38
整数をポインタにキャストしてわけの分からないアドレスをぶっ壊して パルプンテする事は可能ですか?
187 :
デフォルトの名無しさん :2006/03/09(木) 07:10:27
ポインタから自由と責任を奪い取ったのが参照ですか?
>>186 壊そうとする場所とそのとき動いているOSに依る。
189 :
デフォルトの名無しさん :2006/03/09(木) 08:28:46
基本的に自分のプログラム領域しか破壊できませんか?
VC++6なんだけど、 case文の内部で int a ってかいたらエラーがでたんだけど、 int a[1] ってかいたらOkなのは何故?
インライン展開とか二重定義とかそういうあれじゃね?
>>189 MS-DOS や Win9x、Classic Mac OS ならやり放題ですが。
(だから「OS に夜」って書いてあんだろ?)
193 :
デフォルトの名無しさん :2006/03/09(木) 13:25:15
w2kです
やろうと思えば壊せる。
195 :
デフォルトの名無しさん :2006/03/09(木) 17:39:48
>>189 自分のプログラムを破壊できるじゃんw
そして自分のプログラムが暴走して、
そのプロセスの権限で出来ること・・・たとえば
他のファイルの破壊などが可能。
>>184 違いないんですか?
どういうこと?
さっぱりわからん
>>197 関数の引数に於いて〜の配列型は〜へのポインタ型に読み替えられるという規則がある。
それ違うんじゃないかな
>>180 は256+4バイトスタックに積まれる気がする。
pはスタックに積まれている値を持って来て
aはスタックのアドレスを指すんじゃないかと。
テストコード書けばすぐわかるけど、面倒だからやらん。
ぶった切ってすまんが、俺はこのスレタイが妙に好きだ ストレートで笑える
ポインヨ死ね。
>>183 正解を教える。C++においてもCと同様、ヌルのビットパターンは
ゼロだと保証されてはいない。ただ、以下のことが保証されている。
(たとえヌルのビットパターンがゼロでなくても)
char *p = 0; // 必ずヌルビットパターンが代入される
p == 0; // pがヌルビットパターンなら必ず真になる
ゼロと言う数字で代入したり比較してるのでヌルビットパターンが
ゼロビットの羅列でない時は直感的でないが、言語仕様として
そうなるように決められている。
ここを勘違いして、C++のヌルビットパターンはゼロだと思ってる人
が居るみたいだが、詳しくはD&Eを参照
>>183 の質問に関しては、お使いの環境を知らんけど、大概ゼロ
だろうね。と言っておいても困らないと思う。
厳格な話をしてるのにそのレスはないだろう。とオモタ
NULLが0じゃない環境を知りたいもんだ。とオモタ
>>206 言語理論より商業で役に立つことが優先される実動作重視のC++らしい答えだ
>>204 > (たとえヌルのビットパターンがゼロでなくても)
> char *p = 0; // 必ずヌルビットパターンが代入される
> p == 0; // pがヌルビットパターンなら必ず真になる
へー、全く知らなかった
整数の0と代入したり比較したりじゃないのか
あたしポインヨ。よろしくネ! /ハノ)) /*゚ー゚」 「(* *) (´Д`)ハア… //*‖ >\ ハア… // ‖ /<
if(p = NULL) はどんな判定になるの?
>>214 char* p;
だったとして
pがぬるぽ
ifはNULLを評価→偽
216 :
デフォルトの名無しさん :2006/03/11(土) 08:34:11
>>215 NULL が (void*)0 じゃなかったとしても偽なのかな
NULLの内部表現にかかわらず if(p) は if(p != 0)と同じ
NULLは0とは限らないんでしょ?
そうだ、内部表現は0とは限らない だけど int型にdouble値を代入しようとするときに、小数点以下が切り捨てられてて適切に値が変換されるように ポインタに0を代入したり比較するときも、適切に変換されてヌルポインタ値を使う
そんなことせずに、コンパイルエラーになれば 糞コードは減った。
NULLは0じゃないけど0はNULLだ。
じゃあ、NULLを廃止して0にすればすべて解決だな。
223 :
デフォルトの名無しさん :2006/03/12(日) 00:53:39
NULL って (void*)0 とされてることが多いと思うんだけど、 これは NULL って単に人間にとっての分かりやすさのために 定義されているマクロなんだよな。 ポインタとしての 0 は常にヌルポインタであって、 それはアドレスとしての 0x00000000番地 ではないわけだけど、 とすると 0x00000000 番地に書き込みたいときは int* p = (int*)0; *p = 12345; とかやっちゃっていいもんなんだろうか。いや、そんなこと やりたいと思うケースは少ないと思うけど。インラインアセンブラ 使うべき?
ポインタに絶対番地に指定して読み書きなんてハード叩く時には普通にやるぞ。
やらないよ
それができるのはポインタがアドレスになってるアーキテクチャだけってこと わかってやってるんなら何だってやっていいのがC
227 :
デフォルトの名無しさん :2006/03/12(日) 00:58:55
228 :
デフォルトの名無しさん :2006/03/12(日) 01:00:06
「ポインタがアドレスになってるアーキテクチャ」 つまりその保証は C の規格の外、ということか。
…関数ポインタとかも氏ね。 はい,じゃぁネタしまーす。 int, double, char〜
230 :
デフォルトの名無しさん :2006/03/12(日) 01:54:59
this と加茂市ね。
まあ、thisは参照のほうがいいとは思う。 歴史的な理由により、ポインタだけど。
#define This (*this)
ボインたんもいらね
234 :
デフォルトの名無しさん :2006/03/12(日) 05:10:05
ポインタのお陰でC/C++はレーシングカーになれる。 ちゃんと運転できないと、簡単に事故ってメチャメチャになるけどね。 Javaはラリーカーだね。
あ? JAVAなんてゴーカートだろ それも動物の形してるやつで50円入れたら動くやつ
あれって年に一回ぐらい結構マジで欲しくなるときがあるよな!
んなわきゃない
マジで?アレに乗って小銭が続く限りどこまでも、とか想像しないのか?
レーシングカーとラリーカーの違いを教えてください
屋根に電気流した金網張って、そこにポールを接触させて 電気で動く車あったじゃん。 あれって、金網と床を同時に触ったら感電するの?
宣言では、型の方に* 付けるようにしている int* 型という型があるというイメージで でもこれだと幾つもint* 型があるなら 何回もこれ書かないといけない。 後ろに書いても良いならint型の所でまとめて宣言できるけど
どうして、そのような表記方法が広まったのだろう。気持ち悪いよ。
つか、int *型のaとbを一つの宣言で宣言してみろってんだ
int *a, *b;
247 :
デフォルトの名無しさん :2006/03/13(月) 00:28:01
>>239 最高速度
ラリーカーが逆立してもF1カーにはスピードで勝てない
しかしオフロードとなると話は一変する
最高速こそ遅くとも、ラリーカーは道悪での減速が他者よりも相対的に少ない。
でもWindowsだってポインタで直接アドレスの操作できないよね 保護されてるから
250 :
デフォルトの名無しさん :2006/03/13(月) 05:39:25
>>248 ようするにラリーカーはスピードでは中途半端だけど、アスファルトじゃなくても走るってことだよ。
>>226 >それができるのはポインタがアドレスになってるアーキテクチャだけってこと
PL/M だけか。
なんかもうポインタの話もアキテクチャった。
253 :
デフォルトの名無しさん :2006/03/13(月) 21:09:32
ちょとワロタ
254 :
デフォルトの名無しさん :2006/03/13(月) 21:34:22
255 :
デフォルトの名無しさん :2006/03/13(月) 21:37:19
Cのポインタの仕様が悪いって話をすると なぜかアドレスの話に刷りかえる人が出てくるのはしようがないことですか?
つかCの仕様なんて本質的な部分は今更変えようがないし 後発のCとの互換性に縛られない言語はたいていうまいこと改善している。 今更Cの仕様をグダグダ言って何がしたいんだ?
ポインタ兄貴凄かったです!! ガチムチの色黒兄貴がオッス連呼で張型ケツにぶちこまれ腰振ってました。 俺もくわえさせられて浣腸喰らい無様に排便さらしました。 バリカン出されたときは一瞬引いたけど、兄貴の「いやなら止めていいんだぜ!」 の一言で覚悟決め、生まれて初めて丸刈りになりました。 その後、脇・チンゲも刈られてビンビンのマラ、思いっきりしごかれ 派手にガチムチ兄貴の顔に飛ばしました。スッゲー男らしく気持ちよかったです。
ポインタが飛び回って蜘蛛の巣のようだ
>>256 >今更Cの仕様をグダグダ言って何がしたいんだ?
「俺様が理解できないのは、仕様が糞な所為だ」
という事にしたいんだ。
260 :
デフォルトの名無しさん :2006/03/15(水) 00:45:48
確かに今更Cの仕様をグダグダいってもしゃーねーわな ただ、どっかの時点で、配列だけでもオーバーフローしたときに エラーになるように、どっかの偉い人に規定を作ってほしかった そりゃ array[10]も、10[array]も 要は*( (array) + (10))だからしゃーねーだろ って言われりゃごもっともだけど せめて宣言時にarray[10] ってしたときは使うときもarray[1〜10]にして欲しかった ま、別に良いけど。 いまさらの話だし。 でももし、「じゃ、お前の言う通りに配列の最初の要素は1からにしてやるよ」 って言われたら、「いや、困る」って言っちゃうな、だってもう慣れちゃったもん
>ってしたときは使うときもarray[1〜10]にして欲しかった こういう発想の奴はCには向かない。 仮に完全にフルスクラッチでCを作り直したとしてもそうはならないだろう。
ポインタ程度も分からんやつは死(ry
なんだかんだ言って、 おまえら、ポインタ好きなんだろ?
264 :
デフォルトの名無しさん :2006/03/15(水) 06:30:23
今ならポインタ10%増量
int unko; int *unko1; int** unko2; unko1 = &unko; unko1 = NULL; unko1 = *unko2; unko1 = NULL; それぞれの値をunko1に代入してからunko1にNULLを代入したとき、unkoとunko2の値はどうなるでしょう。
どうにもならない。 unko1 = NULLになるだけ
267 :
デフォルトの名無しさん :2006/03/15(水) 13:39:08
>>260 勝手にエラーで止まられては困る。
境界越えた領域を指定してメモリ記憶ぶっ壊したい時どうするんだよ?
例外投げろ
269 :
デフォルトの名無しさん :2006/03/16(木) 05:08:00
>>260 lintで指摘できれていればそれでいいってことはないのか。
配列とポインタの概念が完全に混交してしまっている C病の人たちが集うスレはここですか? まあ 配列とポインタをfusion させたCの設計者は偉いと思うけどね 一度pascal系で配列とポインタの概念を分離させるリハビリをしてみては如何? とのたまうDEL厨でした
271 :
デフォルトの名無しさん :2006/03/16(木) 13:35:43
▲ /ハハハ\ ./ \ / _ _ \ | ⊂・⊃ ⊂・⊃ | (|. ∴ ∪ ∴ | ./ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .\ <=> / < このスレ立てたのは藤木君だろ \_____/ \______________
272 :
デフォルトの名無しさん :2006/03/16(木) 17:59:03
いや、知ってる人は知ってるだろうけど、俺だよ。
ウソダドンドコドーン!
>>270 「似たようなもん」という解釈で特に問題ないからOK
275 :
デフォルトの名無しさん :2006/03/16(木) 18:27:09
もちろんそうよ
エキスパートCプログラミング読めばいいと思う
宣伝乙
thx いちいちお礼いってもらえてうれしいよ
280 :
デフォルトの名無しさん :2006/03/16(木) 18:43:57
>>28 main() {
int a;
int i = (int)&a;
*(int *)i = 0;
printf("%d\n", a);
return 0;
}
結果
0
これは、合法です。
281 :
デフォルトの名無しさん :2006/03/16(木) 18:48:35
16ビットの時代は int 幅 < ポインタ幅 だったからソレが使えなかったね 一部のマイコンのCは今でもそういうのが多い
32bit以降は良い時代になったよね
>>280 ある変数のアドレス演算子の結果をintにキャストした値をポインタ型にキャストして参照はがしすると元の変数となる
というのは、合法なの?
合法です これができるからC言語は強力なのだよ
ということは<<281は非合法?
ポインタ型が整数型で表現できない場合の動作は未定義である
C言語ってなかなか都合がいいようになってんだな・・・
>>281-286 そういうときにはintptr_t/uintptr_t。
C99の<stdint.h>或いはC++なら<boost/cstdint.hpp>で使える。
VC++の少なくとも7.1以上では独自拡張として<stddef.h>などにある。
>>289 int型で表現できなくても
>>288 のでいいんじゃないの?
よくわからんけどint型で表現できるとお得なことでもあるんですか?
int型でいんとちゃう?
292 :
デフォルトの名無しさん :2006/03/16(木) 20:27:30
↑ | | メ\,_ ,メ゙\、 .メ′ .゙゙アhr _,zl||y,_ .゙∨ .″ .y!^⌒ ¨\ .,,,,,,__ .,yr=¬z .l| ◎ 《 . ゙゙̄^へu, ヽ ,メ″,z厂◎ l| ¥ il! ゙ミ つ il「 ミy ..,ilト ゙ミy_ ア ,メ .∨ わ .ll′ 干=冖″ ,,,yyyyy. l| ぁぁ .l| ,,,yvr=冖''''|リ|||》巛》ミ冖'li厂.l| .,l! あぁ .l! 《vvvr=冖¨ ̄ .゙干l! .,メ ああ .l| .l| .,,yrrvy_ ,,,,,,_ .《yrl″ ぁあ \_ ,l|.,yzl^^゙゙^冖《《||7厂`゙リu_ .l|
>>290 int型じゃないけど、ポインタの値をSIMDに突っ込んで
高速にアドレス生成するような用途もあるから、アドレス
がポインタ変数の中だけの存在ではないという話。
64bitになったら
>>280 みたいにintにポインタの値代入できなくなるのかな?
それともintが64bitになるのかな?
intは8バイトになってlongが4バイトになるという奇跡が起こるかもしれない
>>295 sizeof(long)>=sizeof(int)は仕様で決まってますが。
>>294 だから一部の環境では代入に警告が出るようになってきている。
>>280 一緒に仕事したくないけど、どういうときに使うのコレ
Javaで代用できるようなプロジェクトにはおそらく使いませんwwww
くそプロジェクトで使われてるってこと?
c/c++ と pascal (Delphi) との比較 ・Cでは配列=ポインタ ほぼ概念に差が無い char *p; char buf[10]; p=buf; <--- 普通に使われる p[3]=1234; <--- ポインタのまま配列表現可能 ・Delphiでは配列とポインタは別の概念 var buf: array [0..9] of byte; var p:PByte; p:= @buf[0]; <- 配列の中身をアクセスするにはこうする p^ := 1234; <--- buf[0] への代入 ポインタを使いながらCのように相対位置アクセスをしたいなら、配列ポインタを使う必要がある type TAbyte =array [0..999] of byte; var paTAbyte^ absolute p; <--- absolute を使うと、p と paが同じ番地である事を強制出来る p:= @buf[0]; inc(p); pa^[3] = 1234; <--- buf[4] へのアクセス
>>@buf[0] >>pa^[3] ププw こんなダサい構文は思いついても普通実行(実装)に移さないよなw それを平気でやってのけるDelphi開発者にしびれる憧れるぅ! それを使うDelphierはゲロ以下の匂いがぷんぷんするぜぇ〜Www
>>301 その気になればCでもできる、誰もやらないけど。
char buf[10];
char (*pa)[10];
pa = &buf;
(*pa)[3] = 1234;
>>302 Delphi使ったことあるか?
Cマンセーの心揺らぐ出来だぞ
Delphi好きだけどメモリ・ポインタ操作部分のコードは はっきり言って気絶しそうなくらい汚い。 この点に関してDelphiのアドバンテージはない。
PCの資源はたっぷり使いましょうってことです
いや、Del厨がこのスレにしゃしゃり出てきて頓珍漢なことを言い出すのは 同じユーザーとして心が痛むってことです
>>265 unko1 = *unko2; がコンパイラで削除されないなら、時々 アクセスエラーが出るんでしょう
>>223 ハードを直接叩けるような環境なら、それでいいと思うよ。
でも、アセンブラで
_ADR0 .equ 0
.global _ADR0
みたいにしておいて
extern volatile int _ADR0[];
として _ADR0[0] を使う方が綺麗だよね
>>305 もともとpascal自体が、メモリ・ポインタ操作を是としない思想の言語
だからな。 ある意味嫌がらせ的な言語使用になっている。
それだったらいっそポインタ無しでも良かったのに
windows API を叩く時とか、どうしても必要だから実用的な言語にするには
delphiも昔は 動的にサイズを確保する配列なんかは cでいうmallocして free してたし オブジェクトも、new 相当で作ってたけど、 いつの間にかclass型は出来るは、動的配列構文が出来るわで、ポインタは殆ど盲腸だな
>>313 よくわからんがpascalからobject pascalになっただけでは?
delphiにあるメソッドポインタは面白いな メソッドポインタ = クラス+関数ポインタ
>>316 う〜ん、あんまりイメージがつかめん。
ファンクタみたいなもん?
>>313 それがヘジィズムw
あの人のバランス感覚はちょっと壊れてるから
何でも言語仕様の拡張で対応しようとする。
Turbo Pascal 3.0 でとまってる俺。
今更ポインタスレでオラが言語自慢している落ちぶれっぷりに涙を禁じえない。
>>322 そっかあ。言語自慢しちゃったのかあ。可哀想に。
324 :
ポインタ :2006/03/17(金) 21:14:18
僕のためにけんかしないで ><
GC積んでる言語(Dとか)だと
>>280 みたいなキャストされると
追えなくなるんじゃない?
面白いネタがあったので
http://www.lysator.liu.se/c/bwk-on-pascal.html 2.1. The size of an array is part of its type
添字が型の一部なので、ソートとかする時に困ると書いてるけど 今ではオープン配列で解決してる。
さらに動的配列で帰値に可変サイズ配列でも渡せる
2.2. There are no static variables and no initialization
2.3. Related program components must be kept separate
2.4. There is no separate compilation
2.5. Some miscellaneous problems of type and scope
別に型を定義した同じ筈の配列とかに代入出来ないという事だけど・・・まあでもオープン配列なら受け取ってくれるからいいでしょ
if c in [blank, tab, newline] then ...は便利だけど、巨大な集合型で破綻するというのは難癖に思える
in は集合型だけでなく順序型にも使えるようになってるし
なんかDelphiはこの批判をかわす拡張をしてきたように思えるな
327 :
デフォルトの名無しさん :2006/03/17(金) 21:43:04
そこで pin_ptr ですよ!
>>325 Dがどう実現してるのかは知らないけど、C#だとfixedで固定する仕様に
なってるな。でもってこれがコスト高いんだorz
Cを原点0として、Javaを10とするなら、C++は2.5くらいでC#が5だと思っ
たんだけど、fixedのコストを考えるとどうも7.5くらいなんだよな。
C#のunsafeはあくまでネイティブとのインターフェイス用と割り切って使
うものくさい。
Dが上手く5のところに嵌ってくれるなら面白くなりそうなんだけどな。
>>325 D言語とかでは、そういうキャストは未定義としてるみたいだよ
delphiを1度貶めただけでこのスレの伸び。delphierは実に必死ですね。
DelphiもCも素晴らしい Javaは氏ね
Groovyやろうぜ
CやJavaはこんなところで多少貶められたところでどうってことないが Delphiには死活問題だからなぁ〜
335 :
デフォルトの名無しさん :2006/03/18(土) 12:14:39
おとしめられてどうこう、って言うことよりも、 現実に目の前にその言語であげなきゃならない案件があるわけだからなぁ。 おっさん COBOLer もそう言ってました。
336 :
デフォルトの名無しさん :2006/03/18(土) 14:00:49
C++があれば何でもできる気がしてきた 手間はかかるが
そうか、C言語にも _Bool で論理型が定義されたんだな だから、論理型が必要な場面で他の型を書くと、論理型への隠れた型変換が働いているというように見るべきなのか
いや相変わらずだ。 _Boolは整数型の1種。intへの昇格が存在する。
339 :
http://www.vector.co.jp/soft/win95/util/se072729.html :2006/03/18(土) 18:28:49
TextSS の64bit化おながいします もしくは64bitにネイティブ対応した置換ソフトないですか?
_Boolはただのtypedefか#defineだろ
なんでいきなりboolの話…?
boolなんてtypedef enum{false,true}bool でよくね?
>>340 ところがどっこいC99ではきちんと組み込み型の一種。
<stdbool.h>でtypedef _Bool bool;とされていると言う具合。
int foo; int * p = someintarray; foo = p[1]; と foo = *(p + 1); では どちらが機械語になった時に早いの? 同じ??
>>344 使ってるマシンとコンパイラによって違うが、
大抵の場合は同一コードになると思う。
悪い事は言わないから、 int *foo; と int foo[]; を ごっちゃにして使う悪習慣は改善しれ。
別に悪習慣でもないんでもないと思うが 本質的に違うが同じように扱えるもんを同じように扱って何が悪いんだ? お前頭固すぎ
>>347 他の言語にパラダイムシフトした時に、わかるさ。
ポインタなんてC以外で使う気ないもん
>>346 具体的にどういう不都合があるか書いてよ。
納得したら考える。
>>344 前者はfoo = 1[p];とも書けるので、どっちみち他の言語のような構文解析ではすまない。
従って、違うコードを出力するようなコンパイラを作る方がめんどくさい。
>>351 はぁ?
コンパイラって、構文通りに解釈してコードを吐くんだよ?
オプティマイザかけても全く同じになるかどうか・・・気にはなるがな
>>352 >351は端折りすぎだが。
要は、「配列」という特殊な構文はない。
従って、p[1]も*(p+1)も「pの値にsizeof intを足した値でポイントした中身」というような同じ構文と解釈するはずだ。
ということだろ。
>>348 他の言語にパラダイムシフトした時に頭を切り換えられないバカは黙っとれ
ところで、「ポインタ死ね」とあるが、どうすればポインタを殺すことができるのだろうか。
ポインタが誕生した時代にタイムスリップしてどうにかする
358 :
デフォルトの名無しさん :2006/03/25(土) 21:08:57
まずはポインタの母親を捜すところから初めてはどうか
359 :
側近中の側近 ◆0351148456 :2006/03/25(土) 21:13:05
(っ´▽`)っ ポインタって言うからダメなんだよ。アドレスで。
>>356 int * a; //生まれた
a = new int[4];
delete[] a; //死んだ
361 :
デフォルトの名無しさん :2006/03/25(土) 21:36:25
ポインタが誕生した時代にアンドロイドを送り込んで開発者を抹殺する。 いやそいつ一人を殺したところで開発が停止するとは限らないから 「おまえの開発したポインタが数十年後に人類を危機に陥れる」 「いやそんなまさか、俺はそんなつもりでポインタを開発したわけじゃ・・・」 「科学者はいつもそう言う。原爆を作った奴もそういった」 みたいなやり取りで味方に引き入れ、開発室ごと爆破。 その後、C厨がポインタを守るために未来から送り込んだ敵のアンドロイドと死闘を演じ 最後は親指をつきたてながら溶鉱炉に沈んでいく。
>>360 生まれる時が違うぜ? そこじゃ、まだ精子と卵子が出会ってないw
どこの子でも子供は子供だろ システムの中の子でもOK
>>364 うんにゃ ちげーよ
delete[] a; で死ぬのは、a = new int[4]; で生まれた int[4]; の方
a自体はまだ生きてるから、この後、 a = NULL; とかもできる。
ポインタってそんなもんさ。
C言語のコーディング規約で「ポインタは使用しない」とかやって見る。 開発者が死ぬな。氏ぬじゃなく、死ぬな。
ポインタ使用しない、ってことは ポインタ変数の変わりに整数型の変数を用意して キャストしまくれ、ってことでおk?
キャストもポインタを型として使っているので×。 「乗算および文字列リテラル以外での'*'の使用を禁止する」みたいな。
369 :
デフォルトの名無しさん :2006/03/26(日) 02:34:55
ポインターは殺せるけどな。 俺はそういう趣味はない。 猫ならできるけどな
370 :
デフォルトの名無しさん :2006/03/26(日) 03:51:54
>>366 もしかするとC99なら何とかならんことはないかもしれない
が、ポインタを使うライブラリが一切使えないということになるから
やっぱり現実的ではないな・・・
371 :
デフォルトの名無しさん :2006/03/26(日) 03:54:27
>>360 その時点ではまだ死んでないぞ、そのコードがある関数を抜けたら勝手に死ぬ
ポインタ使うな、なんていわれたらそのプロジェクト抜ける
なるべくポインタでなく配列として扱うようにしてるな。 添え字用の変数が増えるけど、まじめなプログラムなら どうせ範囲チェックもしなきゃだからコスト的には 大して変わらんと思う。
でも、大きい配列だと処理がポインタでやるより遅くなるって書いてあるけど本当?
ポインタじゃなくても要は参照で渡せばいいんでしょ
>>361 次回作はさらに進化したJava参照(美人)が相手です
珍走団と同じようにまずは名前を変えてみんなに使う気をなくさせる。 というわけで「ポインタン」に1票。
>>374 今時なら遅くは無いな
その遅さが致命的になる条件なら
なんだってやってやるが、まずは
保守しやすいのが最優先だ
ポインタにテロ攻撃を仕掛けてやる
380 :
デフォルトの名無しさん :2006/03/26(日) 22:25:13
俺はボインタンが好きだな
charをチャーというやつも何とかしてくれ
>>379
>>381 それは俺に対する宣戦布告だな?
ちなみにstrlenはストラレンではなくスターレンと読みます
>>382 バッファ等でポインタを要求してるところには
ポインタ代わりに配列をつっこんでますよ
構造体なんかのを要求してるところは
まあしょうがないと割り切るけどさ。
要は心構えの問題だよ。
C++は知らん
それはいい心構えですね
>>384 だが、その関数の定義にはどうしたってポインタが必要ですね
>>384 呼び出すのは関数ではなく関数ポインタ。
渡すのは配列ではなく配列へのポインタ。
お前はポインタから逃れられていない。
>>387 逃げてるんじゃないよ!
立ち向かっているんだ!
とか言ってみる。
390 :
デフォルトの名無しさん :2006/03/27(月) 11:47:52
確かに参照使った方が脳神経が休まるね。
391 :
デフォルトの名無しさん :2006/03/27(月) 11:54:32
量子コンピュータとか出てきたら逃れられるかもしれない……
>>391 いや、仮想メモリを生成しアドレスを固定してポインタ演算w
あらゆる変数のタイプの1つとして無意識に使えるようになってないうちはまだまだアマちゃんよ
最近の学習書は、ポインタの勉強に『アセンブラかじれや!』とか 言わないの? 漏れは68000かじったぞ? 御蔭で8086嫌いがより一層深まったけどね(藁
やぱやっといたほうがいいよね 何が手ごろだろう
アセンブラからCに移ったけどポインタはわけがわからなかった どう考えてもアドレスじゃないし
>>396 おまいはCが吐き出すアセンブラコードを見ないで育ったくちだな?
基本的にアセンブラやBASICにはコンパイラという概念がないからな。
>>398 BASICコンパイラなんて普通にあっただろ。
多分BASICコンパイラーを知らないんだと思う DOS時代、又はそれ以前はBASICコンパイラーがあった
>>400 >DOS時代、又はそれ以前はBASICコンパイラーがあった
それ以前のBASICコンパイラについて詳しく。
402 :
デフォルトの名無しさん :2006/03/28(火) 11:47:25
>>401 漏れは OS-9 Level2 on FM-11 AD2 で
Basic09 コンパイラを使っていました。
あ、でも Basic09 コンパイラは 6809 のネイティブ
には落とさなかったか。
>>401 HSPみたいに中間コードを吐く形式でネイティブじゃない
だが、一部機種で徹底的に最適化されたコードを吐くコンパイラーが
ユーザーサイドで作られ開発されたりもしたが・・・
要はインタープリタ→中間コード生成→マシン語なんだけど、中間コード生成に掛かる時間が遅かったわけだ、
だから最初に中間コードにコンバートしておけば生成に掛かる時間を省ける
そして実行速度も上がる
勿論アセンブラで組まれた物には敵わなかったが・・・
そこでgameの登場ですよw
BASICはデフォルトで変数の型がfloatというのが今にしたら 変に思う。
>>401 >>403 CP/M 時代の MS BASIC-80 コンパイラが
確か Z80 ネイティブだったと思う。
407 :
デフォルトの名無しさん :2006/03/28(火) 15:30:55
Quick Basic とかちょっと使った気がする。
QuickBasicをコンパイラしたコードをCodeViewに掛けたら、 理解不能なコードを吐いてたのを覚えている。 Quick-Cのコードは単純明快だったのに、やはりBasicは コンパイラ向きではないのかと思った。 でも確かBasicって、メインフレーム上のコンパイラ言語として 開発されたんだよな。インタプリタになったのはパソコンが初めて らしいし。
×QuickBasicをコンパイラした ○QuickBasicをコンパイルした orz
なにこの懐古スレ
昔のPC板向けの話題だ。
412 :
デフォルトの名無しさん :2006/03/28(火) 23:28:49
ポインタは解ったけど ネストされるとやっぱり解らない・・・
ポインタが分らないってよっぽど変なソースでも見たからじゃないのか?
414 :
デフォルトの名無しさん :2006/03/28(火) 23:48:23
えーとね const int * p1; int const * p2; int * const p3;
MZ限定だと思うがWICSとかいうBASICコンパイラが馬鹿っぱやなバイナリー吐いた
>>405 SORDのM5でBASIC-Gをいじってた俺は
整数型しか知りませんよ!
417 :
デフォルトの名無しさん :2006/03/29(水) 00:09:33
>>416 8ビット機の頃って整数型が大半じゃないの?
X68000のX-BASICは実数を扱う事が出来たけど・・・
419 :
デフォルトの名無しさん :2006/03/29(水) 00:42:21
414のをカッコ付けたり *をもう一つ増やしたりしたらわかめ
414の上2つは定数intへのポインタ 下は変数intの定数ポインタ
今からやる世代は大変だな PC98のVRAMいじればポインタなんて一発なんだがw どうしてもエミュレータ使った分厚い洋書になってしまう
422 :
デフォルトの名無しさん :2006/03/29(水) 01:28:38
なんで98は死滅したの?
Windowsにふられたから
> どうしてもエミュレータ使った分厚い洋書になってしまう なんで?
425 :
デフォルトの名無しさん :2006/03/29(水) 02:43:26
コンピュータアーキテクチャ的には98のレベルはどうだったの?
32歳童貞くらいのレベル
>>419 ポインタを引数に取りポインタを返す関数へのポインタの配列とかを
typedefを使わずに定義されてると一瞬うっととくるね。
自分の昔の(趣味の)ソースで時どきある。
書くときは頭の中にストーリー性があるので簡単なのだが、それをいきなり読み取るのはむずい。
>>425 末期のPC-98はAT互換機とBIOSとサウスブリッジ(ISAのかわりにCバス)以外ほぼ互換。
で、そのNEC独自のサウス内蔵のIDEコントローラが酷い性能。
>>414 typedef const int CINT;
typedef int *PINT;
CINT *p1, p2;
const PINT p3;
typedef好きだなおま〜ら
#define INT_PTR int*
432 :
デフォルトの名無しさん :2006/03/29(水) 16:08:52
typedefて俺様仕様って事だよな?
>>418 N88-BASICの場合、DEFINT A-Zと宣言しないと整数型にならなかった。
あと、X1にdB-BASICってな整数型BASICがあったと思ったけど、
ゲーム専用てな具合にバカにされていたような・・・。
ま、乱数求めると1未満の実数が返って来た時代だからなあ。
>>433 普通に i% とすれば整数型も使えますが何か。
#まさか、 % をつけないといけないなんて言わないよね。defstr sすれば s$≡sなわけだし。
436 :
デフォルトの名無しさん :2006/03/32(土) 02:55:27
ポインタのポインタを配列にすして それの先頭をポインタポインタポインタに入れるにはどうすれば良いですか?
>>436 int **a[]; //ポインタへのポインタの配列
int ***b = a; //ポインタへのポインタへのポインタに代入
438 :
デフォルトの名無しさん :2006/03/32(土) 03:42:38
char ********・・・****sとかで非連続領域の配列とかつくれないかな?
439 :
デフォルトの名無しさん :2006/03/32(土) 03:53:02
char* s1[]={"abc","def","ghi"}; char* s2[]={"lmn","opq","stu"}; char ** pp[2]; char *** ppp; pp[0] = s1; pp[1] = s2; ppp = pp って書くとpppとppが同じになってしまう いったいどうすれば?
どういう動作を期待しているのですか
441 :
デフォルトの名無しさん :2006/03/32(土) 04:00:29
ポインタポインタポインタがポインタポインタのアドレスを指すようにしてほしいです
つ アドレス演算子 &
443 :
デフォルトの名無しさん :2006/03/32(土) 04:06:56
ごめん、それでは上手くいかないのだ ポインタ同士をつなぐのではなくて 代入したいのだ char **pp だけだと上手くいくのに配列にすると駄目
444 :
デフォルトの名無しさん :2006/03/32(土) 04:29:09
ゴメン、439のままで出来た coutで結果を表示する方を間違ってた つまらないミス
445 :
デフォルトの名無しさん :2006/03/32(土) 18:23:18
ポインタはたまらんな。
446 :
デフォルトの名無しさん :2006/03/32(土) 19:17:51
vb坊ヒッシだな
448 :
デフォルトの名無しさん :2006/03/32(土) 19:20:59
便利だと思うが。ぽいんた。 つーかないと困る。
449 :
デフォルトの名無しさん :2006/03/32(土) 19:21:00
450 :
デフォルトの名無しさん :2006/04/02(日) 12:31:17
上のレベルのポインタに*付けて 文字列同じように表示すると 同じ型になるのに気付いた
451 :
デフォルトの名無しさん :2006/04/02(日) 13:09:53
表示される文字が 1文字ならchar型 文字列ならchar*型だろこれ? 意外に単純?
char*型は文字列を入れるものでは無くて、 メモリ上に存在する文字列(メモリ上に存在する 一文字の文字が連続領域に配置されたもの)の ポインタ(最初のアドレス)を入れるものだよ。 ここでは便宜上文字列と言ったが、Cでいう文字列とは 通常文字の並びの最後に'\0'があるものだが、 char*型には最後に'\0'がこない固定長の文字列の 最初のポインタも入れられることに注意。 またこのchar*型に入ったアドレスは文字列の最初のアドレスだが、 インクリメントすることで、次の文字のアドレスにすることも可能。
453 :
デフォルトの名無しさん :2006/04/02(日) 13:52:16
プログラムの中で char* っての見たら文字列の先頭アドレスだと思って良い? あとインクリメントする時は&つけて+1してから*つけて戻さないといけないよね?
454 :
デフォルトの名無しさん :2006/04/02(日) 13:55:15
&付けるのって 上のレベルの型から指さないと 動かしたいそのものは指せないからだと思うんだけど
>>453 ダメかもしれないけど俺はその認識でいいと思う
456 :
デフォルトの名無しさん :2006/04/02(日) 14:27:20
char*型そのものを+1すると先頭の文字が移動するだけだった &をつけてから+1して*で戻すと次の文字列に移動できたよ
何の話してるんだ? どうもアホっぽい匂いがするんだが・・
>>456 それは理解しているようでとっても微妙な誤解をしている気がするので、
きちんとコードで書いて説明してみるといいと思う。
459 :
デフォルトの名無しさん :2006/04/02(日) 14:40:57
char* abc[]={"abcdefghi","jklmnopqrstu"};
*(&abc[0]+1)とabc[1]
が同じで
abc[0]+1はbcdefghi
って事
>>457
それだったら&なんかつけないで *(abc+1)で次の文字列に移るんじゃないの?
なんだそりゃw
abc[1]が直感的
464 :
デフォルトの名無しさん :2006/04/02(日) 15:58:22
>>464 やってみたが少なくともBCCならエラー出ないぞ?
何使ってるんだ?
466 :
デフォルトの名無しさん :2006/04/02(日) 16:11:19
VC++ 多分 abcてのがabc[0]と等しいから+1で アドレス+1(4かも)になってbcdefghiを指すポインタの中身 ポインタの中身を*で中身を取り出す事はできないからだと思われ
abcと同じ値なのは&abc[0]だぞ
468 :
デフォルトの名無しさん :2006/04/02(日) 16:16:48
ごめん、それは間違ってるな でも実際に打ち込んだのはabcの方だから 多分合ってる
なにをしようとしたらどんなエラーが出たの? *(abc+1)の型はchar*だよ?
>464 そりゃ(警告)でるよ。配列とポインタを混合するなって。 配列として定義しているのにポインタと混同して使うと混乱してバグ発生の 原因になるから使わないようにと警告を出す。というなら納得できるか? >463のやり方がセオリーとしては正しいだろ?コマンドラインの参照(argvを参照する)も普通はそうするはずだし。 安易に参照使うなって事。この辺のは濫用すると混乱の元。
471 :
デフォルトの名無しさん :2006/04/02(日) 16:28:16
cout <<(*(abc+1)<<endl 1>c:\documents and settings\auto\my documents\visual studio 2005\projects\hairetu\hairetu\hairetu.cpp(25) : error C2563: 仮パラメータ リストまたは関数へのポインタが、適合していません。 1>c:\documents and settings\auto\my documents\visual studio 2005\projects\hairetu\hairetu\hairetu.cpp(25) : error C2568: '<<' : オーバーロード関数のうち、どれを呼び出すのか決定できません。 エラーだぞ
>>471 \ ∩─ー、 ====
\/ ● 、_ `ヽ ======
/ \( ● ● |つ
| X_入__ノ ミ そんなエサで俺様がクマ――!!
、 (_/ ノ /⌒l
/\___ノ゙_/ / =====
〈 __ノ ====
\ \_ \
\___) \ ====== (´⌒
\ ___ \__ (´⌒;;(´⌒;;
\___)___)(´;;⌒ (´⌒;; ズザザザ
(´⌒; (´⌒;;;
473 :
デフォルトの名無しさん :2006/04/02(日) 16:35:20
どこかおかしい?
>>470 そんなんで警告出すやつあんのか?
別にコマンドライン引数をchar **argvとして*(argv+1)とかargv[1]とかしても何も問題ないはずだと思うけど
>>473 括弧の数ぐらい数えてよ(´・ω・`)
475 :
デフォルトの名無しさん :2006/04/02(日) 16:46:45
>>474 キタ━━━━ヽ(☆∀☆ )ノ━━━━!!!!
476 :
デフォルトの名無しさん :2006/04/02(日) 16:54:13
でも、&abc[0]をabcに書き換えただけだから同じで当然か 打ち込みミスすまそ
477 :
デフォルトの名無しさん :2006/04/02(日) 17:07:23
つまり abcてのはabc[0]ってポインタのアドレスの事なの?
abc[0] のアドレスと abc のアドレスって C以外の言語でも 同じだって保証されてるの?
abcはabc[0]の先頭アドレスだろ
あっアホな発言したスマソ
481 :
デフォルトの名無しさん :2006/04/02(日) 17:39:57
気にするな俺なんて ( 見落とした上にabcをポインタと勘違いしてるからね
ポインタの何が嫌いかって「*」コレだよコレ なんで「*」なんだ? だいたい「*」は乗算の演算子だろうが 「/*」と「*/」でコメントだと?割って掛けてどうしようってんだ それとな「&」こいつも気に食わない AND演算子の癖に他の意味で使うんじゃね〜
483 :
デフォルトの名無しさん :2006/04/03(月) 12:55:10
そのうちハンドル ^ とかも よく見かけるようになるのかな。
>453 > プログラムの中で > char* っての見たら文字列の先頭アドレスだと思って良い? 良い場合が殆どだとは思うがそうじゃない場合もあるので注意
char unko = 'u';; char* u = &u;
>>485 error C2440: '初期化中' : 'char **'から'char *'に変換できません。
char unko = 'u';; char* u = &unko; u++; u=''\0';
>>488 だから、何がしたいねんおまえ。
その一バイトインクリメントした先のアドレスに
null文字いれたいんか?
あかんで。怒られるで。
char unko, kintama;
とやっておいて、
>>488 のような事をすると、あ〜ら不思議。kintamaが
'\0'になっちゃいました〜!ってな事も処理系によっては起きるかもな。
かもな。
その前に
>>488 はコンパイルできないけどな。
最後の行が
u='\0';
なら問題ない。'\0' → 0に変換 → u にヌルポインタ代入。
493 :
デフォルトの名無しさん :2006/04/03(月) 20:02:15
char* u = &u &uがchar**型 uがchar*型で OK?
void someImportantFunc(char** c) { for(int i=0;i<4;i++) delete[] c[i]; } char a ='a'; char *unko[] = {new char,new char[100],"aiueo",&a}; someImportantFunc((char**)unko);
>493 それは両辺とも同じ名前の変数("u")が入っている初期化だからエラーになるだけ。 よく考えれば分かるけどそれで通ったとすると無限悪循環になるから。 (&uがchar*****型でuがchar****型でもいいわけだし。) これなら通る。 char** k = NULL; char* u = &k; >482 それを言い出したらASCII文字だけでは記号が足りないんだが。 単語の組み合わせ方で文の意味が変わるように、記号の組み合わせ方で 意味合いが変わるようにでもしないと無理な状態なんだし。 後は書き方次第。
ところがどっこい・・・!そんなコードは通りません・・・!
逆だった。 char* k = NULL; char** u = &k; ちなみに>495のもこうすれば通る。 char** k = NULL; char* u = *k;
498 :
デフォルトの名無しさん :2006/04/03(月) 22:36:45
ポインタって char *** pointer ; までしか役にたちそうもないね
C++なら *& とか **& の方を多用するけどな。
かなりまちがい
502 :
デフォルトの名無しさん :2006/04/04(火) 10:57:35
ぶっちゃけ(゚听)イラネ
503 :
デフォルトの名無しさん :2006/04/04(火) 11:33:41
もう僕は参照のとりこです。 今まで書いたソースもできるかぎりポインタ渡しから参照渡しに書きなおしてます。^^
504 :
デフォルトの名無しさん :2006/04/04(火) 15:20:40
>>498 つーことは、充分役に立ってるってこったな
参照なんて温いことしてんじゃねぇ! 男なら黙ってポインタだろ
>>500 そんな比喩使わんでもふつーに分かるやろーも
どうせ後でふつーに転換せなあかんわけやし
つーか、ポインタってむずいか?
なにがむずいのかオレにもわかるように説明してくれ
ポインタへのポインタがからむと難しい **pと*pの区別がつかなくなるときがある
それは重症ですね
それはただのアホじゃないのか?
510 :
507 :2006/04/04(火) 20:33:26
**pも*pもどっちもポインタを格納してて、 違いはといえばその格納しているアドレスに何が入っているのか、ってことは分かるけど どっちもポインタを格納しているってところで、感覚的に区別がつかなくなるんだよ そういうときは当然図を描いて矢印引っ張っていって、 矢印の先の型がなんなのかちゃんと確認しながらやると分かる 慣れてる人は図なんて描かないでしょ?
511 :
507 :2006/04/04(火) 20:41:49
**pと*pの区別 じゃなくて int **pって宣言したときの p と *p の区別だ
本当はアドレスじゃないというツッコミはうっちゃとくとして pはポインタのアドレス *pはintのアドレス と考えておけばいいんじゃね? pにほかの型のポインタのアドレスを代入しようとしてもコンパイルエラーになるし。
513 :
507 :2006/04/04(火) 21:10:47
頭の中で整理できてないってだけなんだきっと だから、p に入れるのか *p に入れるのかをよく迷う
>513 こう考えてみては? int** p; こう宣言しているとき、 p は int** 型 *p は int* 型 **p は int 型 (&p は int*** 型、となるかは怪しい。)
515 :
507 :2006/04/04(火) 21:30:11
>>514 そうかわかった。「どっちもポインタを格納している」って考えてるからだめなんだ
ポインタ型はポインタ型でも int** と int* があるわけで
「ポインタの先に何があるか」を考えてるからこんがらがってるんだ。たぶん
なんかヒントになった気がする。ありがとうです
あ?こんなもんは算数と同じように経験積めば見ただけでわかるもんだが 馬鹿でもわかるようにヒマツブシのついでにせつめいしてやろうか。 ここでポインタレベルという概念を導入する。以下の変数はそれぞれコメントのようなポインタレベルになる。 int A0;//ポインタレベル0。 int *A1;//ポインタレベル1。 int** A2;//ポインタレベル2。 これらのポインタレベルが異なる変数は互いに代入は不可能である。 代入したいときには、変数同士のポインタレベルを合わせてやらなければならない。 ここでポインタ演算にからむ演算子”*”と”&”、”[ ]”についてその意味を定義する。 *はポインタレベルを1下げる。 &はポインタレベルを1上げる。 hoge[n]はhogeの値にnだけプラスをしたものを新しく生成し、さらにポインタレベルを1下げる。→ *(hoge+n) ただし配列生成時の new hoge[n]は別の意味である。これは単にhogeをn個生成する記述である。 つまりあるポインタレベルの変数をポインタレベルが異なる変数に代入するには、これらの演算子を使ってポインタレベルを同じにしてやればよい。 なおポインタレベルは0より小さくはならない。 A2 = &A1;//正しい。ポインタレベル1のA1のを&演算子でポインタレベルを1上げてポインタレベル2の変数に代入。 A2 = &A0;//間違い。A2に代入するにはポインタレベルが足りない。 A1 = *A2;//正しい。ポインタレベル2のA2に*演算子を使いポインタレベルを1下げているのでA1と同じポインタレベルである。 A0 = *A2;//間違い。A0よりA2のポインタレベルが1高い。 A1 = A2[1];//正しい。A2の値に1を加算してできたもののポインタレベルを1下げてA1に代入している。 ただし、この説明は構文的にエラーにならないようになるだけであり、文脈によってはメモリ破壊を起こす記述も有り得るので注意が必要である。
あ?まで読んだ
519 :
1 :2006/04/04(火) 21:42:08
これのドコがわかりやすいのかがわかんね。
ふむ、やはりわかってる人間の説明はわかってる人間にしかわからないのかな。
522 :
514 :2006/04/04(火) 22:18:22
>516 理論として言いたいことは分かった。概念として捕らえるのはこの説明では無理。 理論の説明しかしてないから基本的な「概念」を理解してる奴にしか通じない。 そして言葉遣いが横柄で嫌味に感じる。 さらにいうなら>520の言い分では「概念を理解でき無い奴は付いてくるな」「概念の説明は不要」と言ってるようなもの。 算数だって最初は概念で教えるというのに。
それは被害妄想
524 :
1 :2006/04/04(火) 22:39:02
>>516 ちゃんと理解してる人が書いてくれてるのなら
いろんな説明のしかたを読むことはとても参考になる
というわけで勉強になりますた
516の説明は中々優れていると思うんだけどな。
で、516を褒めてるやつの何%が自演だ?
>516は「自分はこう理解してるよ」ってのを発表してるんであって, わかってない人に教えてるんではないな いや,オレも教えきらんけどね
530 :
デフォルトの名無しさん :2006/04/05(水) 17:46:15
では再びどうやってポインタを殺すかについて議論しようか
null pointer
ポインタってメモリのことだから、 カナヅチでメモリを破壊すればいける。 ファイルポインタを考えて、HDDも破壊すれば全ておk。
OK お前ちょっと署まで来てもらおうか
ネットワークポインタを殺すためにソフトバンクに爆だ(ry
ポインタを殺すためにまずは「*」を殺そう。 ケツの穴みたいだし。
(*´∀`)
小学校の授業に英語入れるよりアセンブラを入れればいいと思う。
あ、汗…ん……ブラっ、ハァハァ となるからだめだと思うの
あ、汗…ん……ブラっ、ハァハァ となるからだめだと思うの
[;゚д゚] シッパイシマシタ /[_]ヽ | | ………、、あうかだだっととなのめらるんブラ思汗ァァハハ
ポインタウザイから禁止ね。
>536 待て! 掛け算がやりにくくなる
545 :
デフォルトの名無しさん :2006/04/08(土) 11:18:01
関数プロトタイプ宣言内で2次元配列引数の場合 char (*)[] 肛門にしか見えん
社内でのコーディング規約に禁止のとこ あったよね。
547 :
デフォルトの名無しさん :2006/04/08(土) 11:51:58
void * なにこれ?
void型のポインタ
void型の変数のアドレスを格納する型、ってことですか?
voidは何も無いんだからvoid型に何か入れられるわけないじゃないか
そうやってまたいじめる
(;_;)
(-_ - )キカナイネ
variant型じゃねーの?
マロックはvoid*返り血だったなw
それが何か?
読み方はマロックじゃなくてエムアロックだと思う
void* malloc(size_t) でいいんだっけ? >549 void*型は「ポインタの先は型指定なし」=「純粋にアドレスだけを格納する型」と考える。
そういやvoid*インクリメントとかするとどんだけアドレス進むんだろ
出来ないよ>インクリメント、デクリメント 某C言語入門本によると 「void*型ポインタは要素のサイズを持っていないので、これらの計算は不可能であり、また意味もありません。」 だってさ。
そうなのか 1バイト進むとか変わらないとかを期待してたのに
workはなんて読む? そう、ワークだね。 じゃあwalkは? そう、ウォーク。 だからmallocは正しくはモーロックだ。わかったね? え? それはお前のことだって?
何を言い出すんだお前は
ポインタの利便性ってスコープ外での値の変換が出来るってことでいいの?
ポインタをいじればうまくアロケータを作れる
ポインタで世界を支配することはできなくても 世界を混乱に陥れることはできる ビルなんか壊すより、よっぽど建設的だと思うな
マロックカロックと覚えてたのに
エムアロック シーアロック リアロック
GlobalAlloch
570 :
デフォルトの名無しさん :2006/04/09(日) 18:40:14
あろっち!
グローバルアロッチ!
あろっち! あろっち! あろっち〜〜〜〜!
アロッチタン(・∀・)モエッ
ポインタは死なない。 に、128アロッチ
明日の気圧は1028アロッチ
書くときに略してるだけで読む時まで略さなくてもいいのに。
君とアロッチしたい!(*ノノ)キャー
何この流れ( 'A`)
>>562 母音oとaの読みが変わるのは 子音wのとき
それ以外は大体ローマ字読みで良い
か、勘違いしないでよね!別にあんたとアロッチしたいんじゃないんだからね!
582 :
デフォルトの名無しさん :2006/04/10(月) 09:58:36
中身が解放されたのに、それを指すポインタが 生きているとダングリング・ポインタになってバグの 温床になる。 そんな時は、ポインタ死ね。
スマートポインタ市ね
>>581 一般的に"al"は「おー」と発音するとそれっぽくなる。
従って、"small"→「すもーる」。
585 :
デフォルトの名無しさん :2006/04/10(月) 11:25:23
ぁおーだけどね。 正確に発すると〔すまぉーる〕になるよ
コンパイルオプションで、ダングリングポインタチェックや配列境界チェックのon/offを制御できるといいね。 #oragmaで性能的に気になるところでは意図的にはずせるようになっているとより便利。
ぐまー。#oragmaじゃない、#pragma。
オ ラ グ マ !! オ ラ グ マ !! オ ラ グ マ !!
ポインタのおかげでメモリ内容の大移動とかせずにプログラムが書ける わけだが...とまじレスしてみる。 JAVAなんて大っ嫌いだ。
参照は似たようなもんだお
Javaにだってポインタはあるって本に書いてありましたよ!! Cしか学んでない俺はがっくりきたよ
参照は小粒でもピリリと辛いってね
え?
バイトコードとしては普通に間接アドレッシングはあるんだろうなぁ。 ってそれだったら普通の汎用プロセッサじゃん。 どうなん?
>>595 そりゃあるだろうが
それと、Cでいうところのポインタと
何の関係が?
「Java の言語仕様にポインタがない」と言っているときに 「いやバイトコードの中にはある」とか言う人初めて見た。
よくいるじゃん 意図的ミスリードかただの○○かは知らんけど
「いやエラーメッセージのなかにはある」と言った奴のおかげで 「ぬるぽ」が産まれたわけで、そういう○○も世の中には必要だな。
null pointer
Javaにはポインタはないのになんで「ぬるぽ」はあるんですか? みたいなくだらない質問がくるかもよ。
イチオウオヤクソクネ
Λ_Λ \\
( ・∀・) | | ガガガッ
と ) | | 人
Y /ノ .人 < >__Λ∩
/ ) .人 < >__Λ ∩Д´)/
_/し' < >_Λ∩Д´)/ / ←
>>600 (_フ彡 V`Д´)/ / ←
>>601 / ←
>>602
は?何でなぐんの?意味わかんねー
なにぬかしとんねん 殴られるに決まっておろうが Javaにはポインタはないんだからよぉ
ポインタ→ボインだ
ソースレベルの話してるのになんでバイトコード出してくんねん
>607 お前さんは>598からの流れを読んでないのかい?
俺のポインタが凄い勢いで硬くなってる
あっ、それポインタだったんだ〜 てっきりtinyintかと思ってた
でも中身NULLだから、どこも指してないと
NULLNULLだぜ
さすがPG童貞臭ぷんぷんだぜ
いじめないでくれよ〜 ぼくはわるいポインタじゃないよ。
ポインタ は ぶき です。 よろしいですか?
コンピュータ上ではかなり強い武器だなw
ドラクエでいうところの「もろはのつるぎ」
>>617 ドラクエで言わなくても「諸刃の剣」だな。
脆刃の剣
皆殺しの剣じだと思う。
ケンジって誰さ?
もろ出しのケンジと聞いてすっころんできました
623 :
デフォルトの名無しさん :2006/04/16(日) 19:27:18
あの〜、Vistaになったらポインタは64ビットになるのでしょうか・・・?
XP と同じく、Vista にも 32 ビット版と 64 ビット版がある。
x64じゃないならアドレスも32ビットでしか指せない
指せるアドレスの数が4294967295から18446744073709551615に増えたからといってどうだというのだ
64bitなんてサーバでもなけりゃ不要だろ 一つのアプリにとっては32bitのメモリ空間で十分だな 32bit仮想マシンが沢山作れるというシステムで PCの世界の最終形態はこうでしたで、いいんじゃないの? この上は人工知能様の登場を待って、その方向性(たぶんポインタが無い世界)に移動だろ
>>628 動画編集とかだと、全然たりませんけど。
>>629 >>628 は仮想メモリを知らんのだろ。
それよか、今まで32bitだった可変長引数がいつ移行されるのかが気になる。
可変長引数が32bitってなんだ? printfにdoubleわたせなかったのか?
可変長引数の場合、char型はint型に、short int型はint型に暗黙に変換されるんだっけ? そういう話?
633 :
デフォルトの名無しさん :2006/04/17(月) 21:52:25
doubleは分割だろ。 可変長引数いつもどうやって調べてんだよ。
640KBで充分だといっていた時代もありました
メモリ16GBあれば、全部オンメモリで処理できて楽だなーと思うようなことはたまにある。
>634 今みたいな馬鹿でかいデータを扱うわけでもなく、プログラム本体も小さく、シンプル(悪く言えば低機能)だった時代の話。 >635 16GBって、何を処理させるつもりだ?
例えば100mmオーダーの板状のものを100nmオーダーの解像度で設計図を書いたとして、 これをベクタラスタ変換しようと思うと100μm程度のスライスにしてもあっさり1GBの8ビット諧調画像になるね。 隣のスライスとの整合性を取ろうとすると、更に倍。そいつをフィルタリングすると更に倍。 こういう応用だと4GBでも足りないなんて話が現実問題としてごろごろしている。
ラスタにするのが間違い
>>638 つまり、世の中間違いだらけだと?
光の波長程度の解像度が必要になると、どうしても光の回折などを考慮する必要が出るのだが。
先端技術や高度な問題領域でメモリやCPUパワーを限界まで要求するのは分かるが 既存業務やアプリがどんどんでかく重くなるのは納得いかんなぁ
そしてゲームはシンプルに戻った。 #厳密には二分化か。 オフィスソフトは?
>637、>639 >638の言うとおりだよ。 まさかとは思うけどさULSIクラスのIC製造用の回路パターン(しかもダイ1個分じゃなくてウェハ1枚分)を全部オンメモリ処理させようとか 無茶な条件想定してない?(それじゃ10年以上も前のVLSI製造はどうやってたんだよ、ってことになるが。) 普通そういうのはプロッタ(専用のものかもしれない)で描いた上でカメラワークで縮小するべきじゃないか? >光の回折などを考慮 そういうのは光学機器メーカーの腕の見せ所。PCには関係ないだろ。 ともかく、そんな異常に高い量子化精度のデータをPCで一括して扱おうとすること自体が間違い。 >641 アプリ屋の目論見がそういう方向に向かう限りなんだかんだで重くなり続ける。馬鹿みたいに機能が増え続けるだけ。結局全機能使いこなす意味もなくなる。
間違いというか、そういうの処理するのが簡単に書けるじゃんって話じゃないの?
>>642 まさかと思うのだろうけど、>637規模の話は実際転がっているよ。
間違いだろうがなんだろうが、実際あるんだから仕方がない。
生半可な知識で想像してないで、自分の知らない世界もあるんだと納得しておいたほうがいいよ。
衛星写真とかの例でもいいんじゃね?
気象解析もメモリ無駄食いするねぇ。
プログラムからアドレス弄れるのってメジャーどこだと C, ASM, Pascal だけ?
「アドレス弄る」がなにを指すのか知らんが、かつてのbasicにも立派にメモリ操作ステートメントがありましたな。
>つまり、世の中間違いだらけだと? >光の波長程度の解像度が必要になると、どうしても光の回折などを考慮する必要が出るのだが。 →手法自体が間違いである事を否定している。 >間違いだろうがなんだろうが、実際あるんだから仕方がない。 →手法自体が間違いである可能性を認めている。
いやぁ、俺もさ。 先日、俺のパソコンで「いもうとシミュレータ」を作ってやろうと思ってさ。 いろいろ調べたんだけど、 何か、人間の体の細胞って 100 兆個以上もあるんだって? この時点で、既に4GBに入らないよな。 確かに、この規模の話は実際転がっているよ。 自分の知らない世界もあるんだと実感したね。
何言ってるんだ 知ってる世界より知らない世界のほうが圧倒的に多いに決まってる
それを実感できるかできないかは別の話
>>653 何言ってるんだ
俺の知らない世界の存在など俺の世界には無関係だ
>>651 >>間違いだろうがなんだろうが、実際あるんだから仕方がない。
>→手法自体が間違いである可能性を認めている。
間違い。単に実在することを述べているに過ぎない。
>>652 最初は1個なんだから、1個から4GBに入る限界までで楽しめばいいよ。
>>657 それはまずいだろ
せめて胎ン中から出るとこまではいかねーと
ゾウリムシで我慢しとけばいいんだよ
>>656 >間違い。単に実在することを述べているに過ぎない。
普通、「述べているに過ぎない」文章のお尻には
「仕方がない」などという言葉は付かないと思うが?
俺らなんて所詮ゾウリムシ程度の存在なのさ
お前だけだよ。一緒にすんなやwww
64ビットPCのおかげで大きめの会社でも1円単位でのお金の計算がPCでできるようになる。 しかし、128ビット浮動小数点レジスタが実装されるわけじゃないから高精度の技術計算が PCの仕事になるわけじゃない。しかし、8086+8087が後に統一されたように、浮動小数点 レジスタもパワーアップされるのも時間の問題だと思う。 そうなってくれたら、俺は定年後も自宅で研究ができるわけだが...
666
現在は80bitだが、これで精度が不足するわけかい?
668 :
デフォルトの名無しさん :2006/04/26(水) 13:23:54
参照ってなんですか??
>>668 こんな感じ。
#include "stdafx.h"
#include<windows.h>
//---------------------------
void f(char*& p)
{
p = new char[256]; // <--- この p は、main の pm を参照してる(同じ)
lstrcpy(p, "abc\n");
}
//---------------------------
void f2(char* p)
{
p = new char[256]; // <--- この p は、main の pm と別物(f2の中だけで有効)
lstrcpy(p, "abc\n");
}
//---------------------------
int main(int argc, char* argv[])
{
char* pm = NULL;
f(pm); // 参照タイプ
printf(pm); // <--- pmのなかに、f のなかで確保したメモリのアドレスが入ってる。
delete pm;
pm = NULL;
f2(pm);
printf(pm); // <--- pmのなかには、NULLがはいってるからエラー。
delete pm;
return 0;
}
void f(char*& p) の場合は、pm自体のアドレスが渡されて、
void f(char* p) の場合は、pmの中身が渡される。
672 :
670 :2006/04/26(水) 17:41:04
型通りのレスが頂けて、大変光栄に存じます。
>>671 [゚д゚] デフラグカンリョウ
/[_]b
| |
066679>>>>。。あいうがござしたとどなねほまりろ氏
>>665 自分で多倍長実数演算すればいいんじゃね?
つーか、通貨の演算を整数演算で行うなんて信じられないが。
まさか、通貨の演算を浮動小数点演算するのか?
>>665 早く定年になるといいですね
あ、でも、投稿を読む限りではその前に整理されるかな?
よかったですね。
つーか、参照ってC++だけとちゃうし
680 :
デフォルトの名無しさん :2006/04/27(木) 05:48:10
なんでポインタがそんな嫌われるのかわからん
参照の実装が必ずポインタになるとは限らない 将来連想記憶へのアクセスが1サイクルで出来るようになれば 今のように変数名をコンパイルして特定のアドレス値として解消するのではなく 変数名そのままが扱えるようになるかもしれない。 そうなれば、参照渡しもアドレスではなく 変数名を渡すようになるだろう
>>680 きちんと使えない馬鹿が多いから敬遠されている。
>>676 浮動小数点で何が困るわけ?
え? 0.1? 0.1を使うなら最初から10倍しておけよ
俺はポインタがないJAVAとか使いたくないけどな。データは殆ど構造体か クラスに格納し、そのポインタをlistとかvectorの要素にして、楽してる。 メモリマップもイメージしやすいし。
>>681 そんな使い勝手の悪いメモリーマップ嫌だ。
>>683 全ビットフルに使わず、演算速度も劣る形式を選択するわけですか。
通貨は1円未満は切捨てが基本だろうに、四捨五入されて切り上げにでもなったら 使えないジャン
なんで文字列形を使わないの?
>>688 は普段「もじれつけい」と読んでいるらしい事は判った。
>>684 そういう使い方ならJavaも同じというか、Javaはそれしかできない。
Javaの変数ってC++で言うところのshared_ptrだから、
ArrayListやVectorの要素は常にポインタ。
691 :
デフォルトの名無しさん :2006/04/27(木) 17:25:19
>>678 これのさ
>「見るだけや から貸せ。」と言われてもその保証が無い場合、全面的に信用できないのと同 じです。
とか書いてるけどさ、
C++のプログラミングって、なんか外から編集できないなんかとか、
オブジェクトに対するアクセス権をやたら制限したりするけど、
あれって、自分の作るプログラムで、自分が分かって作ってんのに、なんで制限とかしなくちゃいけないの?
見るだけだったら見るだけって分かってるんじゃないの?
なんか意味が有るのかさっぱりわからん。
692 :
デフォルトの名無しさん :2006/04/27(木) 17:32:40
>>691 一人で短時間で作ってるのなら必要ない機能だね。
複数でやってる時や、将来の自分の為、というか酷い事になった事が常であった経験から作られた機能。
もっとも、触りたくなったら好きなようにソース弄られる状態だと意味ないわけだけどね
>>691 を読んで、
>>678 のリンク先を見てみた。
…ぅゎぁ。
そこ、参考にしない方がいい。
| 参照型変数を使うメリットを考えてみましょう。結論から言いますと
|
| * オブジェクトのコピーをとることなく、オブジェクトの実体を関数に渡せる。
| * const修飾子を付けることで、カプセル化をより強力にできる。
|
| の二点に尽きます。
ポインタでも同じ。
| オブジェクトのポインタが渡されてしまうと関数の内部で自由にオブジェクトにアクセスできますから
| 関数内での Read Onlyを保証することができません。
大嘘。
void func(const A* ra);
とすると、func 内で ra が指すインスタンスは変更できない。
| (教訓) 「参照型変数は仮引数の宣言でconstと共に用いるべし。」
参照の使いどころは関数の引数に限らないし、const である必要もない。
| ローカルでないオブジェクト(静的領域にあるオブジェクト)は、関数が終了しても消滅しないので
| その参照を関数が返すことが可能になります。
| こういった、オブジェクトを関数内で生成するには、後述の newキーワードを使います。
一体、どういう理解をしているのかが理解不能。
>| こういった、オブジェクトを関数内で生成するには、後述の newキーワードを使います。 更に言えば、「こういった」が掛かるのは何か判らなくなっている。 オブジェクトを指したいのであればそこに読点を挟んではいけない。 こういった文章を書く輩は大抵、物事をきちんと理解しないまま語る傾向がある。 まさしくその典型のようで、他のページにも同様の誤解があるようだ。
正直たたくほどの価値があるページとも思えん
>>678 の意図がわからん
Effective C++すら理解してなさそうだ
うむ
も〜っと!Effective C♯
宗教信者は多いだろ。 例えばアメリカ人C/C++ユーザの多くはキリスト教徒かマホメット教徒だ。
C/C++ユーザには宗教信者はいないという宗教への信仰が揺らいだわけだね
>>702 その話の持って行き方は明らかにおかしい。
C++にはC++こそ最良のオブジェクト指向言語って宗教を信じてるやつがいそうだな
>>700 C++信者というより、C#信者が現実に負けて棄教したって感じに取れるけど。
俺、この人のC#本持ってるわ。
gotoが駄目だといったん思ったらどんな事があろうが絶対に意地でも決して使わないタイプだな。
ポインタのイメージマスコットを作っといて。クマーみたいなかわいい奴。 したら勉強する気になるかも。
>>707 (゚∀( * )
↑こんなのどうだ? アスタリスクを使ってることでポインタのイメージに合うし、かわいいぞ。
見ろ肛門
1 :名無しさん@お腹いっぱい。:02/07/17 11:35 ID:rKM798Cx
( )
ノ( * )ヽ
ノωヽ
2 :名無しさん@お腹いっぱい。:02/07/17 11:39 ID:ORWCZ4de
>>1 がんばって生きろ・・・
3 :名無しさん@お腹いっぱい。:02/07/17 11:44 ID:kIN8F5jW
>>1 死ぬな・・・
テリーマンなんか、どうだろう。 デコに '*' と入れてなかったっけ?
★だろ
712 :
デフォルトの名無しさん :2006/05/10(水) 18:10:03
肉
★はザ・ウルトラマン
米
★はデコではなく肩だな
716 :
デフォルトの名無しさん :2006/05/11(木) 10:20:13
☆は つのだ☆ひろ
☆は乳首に決まってるだろ
718 :
デフォルトの名無しさん :2006/05/12(金) 19:37:56
実は俺もそう思った
★★ ≡≡ 二等陸佐
ポインタより多重継承を殺してくれよ わけわからん
使わなければいいだろ。
スーパークラスのサブクラスのサブクラスのサブクラスが 実はインターフェースでつながっていてそのインターフェースうおおおおおお
インターフェースだけでもなんとかなったりする。ならなかったりする。
C++のような多重継承がある上で、さらにC#/Java/Dのようなインターフェイスもある言語があったらいいと思う。
へ、C++ってインターフェイス使えないの?
インターフェイスをあらわすのには純粋仮想関数を並べたクラスを使う。 抽象クラスとの区別が付きにくい感じがするのが俺は好きでない。
>>725 自分で作れ。
俺は計算速度を限界まで高められる言語作ってる。
今の所、「活発的ななんとか」っていうソフトから作られる奴の二十数倍はスピード出る。はず。論理上。
ActivePerl?ActiveBasic?
多重継承は使わない約束にしとかないといろいろ困るだろうな
ある程度用途の限定されたライブラリを作るときに、よく考えてから使えば、特に困らない。
>>728 下を見たらきりがないからな。
アセンブラの二十数倍ならスゲェと思う。(どうやってやるかは知らんが)
アセンブラの二十数倍以上でる言語……。 GPU上で動くシェーダー言語とか?
動作周波数1GHzのCPUのアセンブラと 動作周波数100MHzのFPGAのHDLとでは どちらが高速に動作しますか?
当然後者
動作周波数10MHzのFPGAとかでも高速ですか?
アプリケーションの並列度による
740 :
デフォルトの名無しさん :2006/05/21(日) 04:38:34
ポインタさえ理解できないやつは、他のどのプログラミング言語 やろうが、結局挫折する・・・と思う
ボインちゃん死ねに見えて、1こそ死ねと思った。 そんな徹夜明けの朝。
ひんにうまんせー
>>740 Cのポインタは最初は良く分からなかったけど,
Javaで参照渡しとかに慣れてからまたCをやったら理解できるようになったよ.
>>740 ポインタ理解出来たくらいで
そこまで言い切っちゃう奴も同様ではないかと。
ポインタが変な方向へ動く事がしょっちゅうあるんだけど、これってなんなの?
ポインタが勝手に変な方向へ動く事がしょっちゅうあるんだけど、これってなんなの?
747 :
デフォルトの名無しさん :2006/05/23(火) 03:45:43
ポインタが自分勝手に変な方向へ動く事がしょっちゅうあるんだけど、これってなんなの?
日 本 語 で お k 。
>>745 char *p1;
int *p2;
p1++
と
p2++
の違いが分かってないとか?
新しいマウス買えよ。。。
マウスより、机環境のせいだと思うぞ。
ツルツルじゃない白紙が一番良い
タッチパッドだたりして
ポインタ変数などの宣言/定義についてわかりやすい考え方。 Cの宣言ていうのは、基本的に、 A B; って形で書かれて、 「Bの型がAになるようにBの中の未知のもの宣言」って意味になる。 例を挙げると、 int a; // a : int になるように a を宣言 → a : int int *b; // *b : int になるように b を宣言 → b : pointer to int int c[10]; // c[i] : int → c : array of int const int *d; // *d : const int → d : pointer to (const int) // dは書き換えられるけど、*dはconstだから書き換えられない int *const e; // *(const e) : int → const e : pointer to int // eはconstだから書き換えられないけど、*eは書き換えられる int f(char); // f(char) : int → f : char を受け取って int を返す関数 int (*g)(char); // (*g)(char) : int → *g : char から int への関数 → g pointer to: 関数 こんな感じ。 てかこれ、K&Rに書いてあるよな。
ボンズも756超えるのかな
756がわかりやすいって思った人、いる?
やっぱりメジャーで偉大なのは ハンク・アーロンだよね 王なんて向こうでは参考記録程度の扱い
>758 一見して読む気が失せる
int型のポインタっていう言い方が間違っていて、 int型へのポインタっていう言い方が正しい理由が分かりますえん。
>>761 イント型のポインタ void *Ptr; int iPtr = reinterpret_cast<int>(Ptr); つまり、int型に詰め込んだポインタ
イント型へのポインタ int i; void *Ptr = reinterpret_cast<void*>(&i); つまり、int型のなにがしを指してるポインタ
って事じゃねえか? 前者はint型とアドレス空間が同一サイズの環境でしかムリな書き方だけどなw
インド型のボインだよ?
char const *a; const char *a; の区別がよくわかりません。 どう違うのかはよくわかっているのですが、 いつもどっちがどっちだっけ?と悩みます。 分かりやすい覚え方ないでしょうか?
>>764 >どう違うのかはよくわかっているのですが、
その2つはどう見ても同じだし、よくわかってない。
* の右にあれば、a (ポインタ) が書き換え不可。
char * const a;
* の左にあれば、*a (ポインタが指す中身) が書き換え不可。
const char *a;
char const *a;
つか、「変数名から外に向かって読む」って原則通りなんだが。
どう見ても同じものです。 本当にありがとうございました。
全然別だと思うんだが・・・
>>767 何が別なんだ?
#まさかとは思うが、char const * aとconst char * aが別だなんて言わないよな。
それは同じ すまんケータイからで流れ読めてなかった
このスレを見ているとわかっていたはずのものがわからなくなっていく気がする
感覚的に使ってるっぽいので俺には理解不可だわ
773 :
デフォルトの名無しさん :2006/07/18(火) 12:32:31
携帯死ね
774 :
デフォルトの名無しさん :2006/07/18(火) 17:50:57
正直、いまだに typedef BOOL (*unko)(viod) になじめない
なじまなくていいよそんなクソコード
ポインタと参照を同時に使われるとわけわかんなくならない? ポインタのポインタのほうが判りやすいと思うのだが。
777
>778 test
>>778 の人気に嫉…いや人気があるわけじゃないのか。
>>778 typedefしてるかも知れないじゃないか。
>>774 なんで関数ポインタがBOOLになるんですか?
>>783 それは、BOOL型を返す、viod型を引き数に持つ関数ポインタをunkoとtypedefしているのだ。
>>782 馴染めないだろ。
#include <stdio.h> BOOL implemented_unko(void) { return 783 == unko; } int main(void) { unko f; f = implemented_unko; fprintf(stdout, "%d", f()); return 0; }
「関数ポインタっすかw」 「オブジェクトごと渡してメンバ関数呼んだほうが良くありませんかw」
787 :
デフォルトの名無しさん :2006/07/26(水) 21:32:43
俺にプログラミングの演習でそこらじゅうが分からないと聞いてきた奴が居た。(つまり俺に答えを教えてくれと言ってる様な物だ) 面倒起こすとうざいから、「この関数に a, b, c という引数を入れるんですよ(b は変数のポインタを入れる)」と教えてやった。 そいつは関数の定義を無視して b, c, a を入れてエラーが出るとか抜かしてきた(当然エラーと警告の違いも分かっていない)。 「定義に従って順番どおりに入れて下さいね(^^;」。またエラーが出るとか抜かしてきやがった(警告だって!!!!)。 「定義ちゃんと見てますか?(^^; ポインタを渡すんだから & 付けなければいけないんですよ?」 DQN「へー、じゃあこの * とかは付けなくていいの?」 <- 教科書を読んでない事を確信させる一言 そんなんで後期の数値解析とか出られると困るから教科書嫁、出来ないんだったら光の速さで氏ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C++で超頑張るとポインタを使う機会はかなり減らせる そのかわりテンプレート絡みでコンパイルエラーになると コンパイラのメッセージがニャントロ星人の言語みたいになる諸刃の剣
ニャントロ星人
変数がデータの入れ物ってだけでも面倒なのに さらにその変数を入れる入れ物があるなんて! ポインタを作った人はマゾか基地外です。
キャベツに失礼だろ
なんだと!
漏れは現役じゃないけど宿題とか課題出たら 友達に配布するバージョンと自分の提出用バージョンの 二つを作ってたな
>>786 二行目の台詞に激しく同意!!!
「オブジェクトごと渡してメンバ関数呼」んだ方が
ずぅぅっと便利でわかりやすいし、色んなことが出来ると思う!!
>>794 俺、オレオレポインタ。
君の勉強熱心なところに惚れた。
君のためなら死んでもいい。
つか、ポインタのどこが難しいのか俺には分からん。。。
「どうやら大部分の人々はポインタを理解するための脳の一部分を持たずして生まれてくる」 という話はホントかも知れない。
800 :
デフォルトの名無しさん :2006/07/28(金) 07:38:56
ポインタの仕組みは理解したはいいが、 何に使うのか分からん 配列以外の使い道の例教えてくれ
使い道が判らん様では真に理解したとは言えないだろうよ。
802
>>800 リストやツリー等のデータ構造の表現・実装。
>>800 関数のポインタ
ファイルポインタ
ポリモフィズム
>>804 >ファイルポインタ
こりゃカプセル化の実例だべ。
なんか問題ありますか?
qsort 配列自身と各要素へのポインタと比較関数ポインタの部分と 縦横無尽に使ってる
八百屋
>>808 ポインタを置いてる八百屋はまずないと思いますが。
タイムセール 新鮮ポインタ、一山100円
姉さん、元気ですか? 心配かけてごめんなさい。僕は相変わらずポインタの仕事をしています。 いろんなものを指し示したり、死ね。って言われたり、がっされたり大変です。 姉さんは参照の仕事でしたね。がっされることがないのはうらやましいです。 いつか僕も参照の仕事につきたいけど、不況だし、姉さんみたいにエリートじゃ ないからちょっと無理かな。 父さんは定年後スマートポインタやるぞーとか言ってたけどその後どうですか? その後おとなしくしていますか? またやるって言い出したら止めてあげてください。
ポインタ無くなったらぬるぽの存在価値が
ポインタ = アドレス それ以外の何があるんだろう。。。
そうでない実装も作ろうと思えば作れる。
>>815 いや、勘弁してw
もう万能ポインタとか要らんから・・・
>>814 それはわかるのだが、
データを扱うのになぜわざわざアドレスという
間接的な概念をかますのか、ということだな。
ポインタのない言語があるのだから、ポインタのある言語が
設計者の努力不足と叩かれるのは仕方あるまい。
ポインタのない言語は制約が多すぎる。
>データを扱うのになぜわざわざアドレスという >間接的な概念をかますのか、ということだな。 ここは同意出来るが何を言い出すのかと思えば >ポインタのない言語があるのだから、ポインタのある言語が >設計者の努力不足と叩かれるのは仕方あるまい。 ただの阿呆だったか。
820 :
819 :2006/07/29(土) 08:06:35
ゴルフをするときは色々な種類のクラブを持っていたほうが有利な場合もある、ということです(^^)
>>814 ・アドレス(ワード単位) + バイト位置
・セグメントアドレス + オフセットアドレス
幾らでもあるだろうに。
アフォ毛
ポインタ使えないやつってどうやって関数組んでるのかすごく気になる
いや別に、ポインタを使わない関数なんていくらでもあるわけだが。
プログラム範囲が滅茶苦茶狭くなるがな。
全部インスタンスで扱うから、コンストラクト/ですとらくとのオーバーヒートがすごいな。
どっかに参照も使わないって書いてある?
あっ! そ・・・そうか!ポインタを使わなくても、参照は使えるんだ! それなら・・・なんとかできるかもしれない・・・!
グローバル使いまくってるかと思うとぞっとする
やっとつっこんでくれた\(^○^)/
\(^○^)/ ヤッター!
833 :
デフォルトの名無しさん :2006/07/31(月) 17:28:58
*\(^○^)/ ヤッター!
return (*(void (*)(int, void (*)(int)))(int)signal)(SIGINT, SIG_IGN); ガンガンいこうぜ
>>834 こういうソース考えたやつは馬鹿じゃねーの
関数へのポインタを返す関数のポインタ
837 :
デフォルトの名無しさん :2006/08/02(水) 00:25:09
>>834 はひっかけだろ。エラーになる。
#include <stdio.h>
/* #include <signal.h> */
#define SIGINT 0
#define SIG_IGN f
typedef void fnc(int); typedef fnc *fnc_p;
void f(int a)
{
printf("f(%d)\n", a);
}
void ( *signal(int signum, void (*sighandler)(int) ) )(int)
{
return sighandler;
}
fnc_p sigcall(void)
{
return ((void(*(*)(int, void (*)(int)))(int))signal)(SIGINT, SIG_IGN); /* こっちなら通る */
/*return (*(void (*)(int, void (*)(int)))(int)signal)(SIGINT, SIG_IGN); これが
>>834 */
}
int main(void)
{
fnc_p p = sigcall();
p(10);
return 0;
}
>>835 void ( * signal(int SIG, void(*FUNC)(int)) )(int);
これでも標準関数なんだけどねぇ。
>>838 あ、こういう関数があると知ってから
>>834 を見ればわかるわ。
だけどいきなり文中に出てこられたらわからん・・・。
840 :
デフォルトの名無しさん :2006/08/02(水) 08:43:47
必要なデータは予め配列として全部確保しといて、 ポインタではなく、その配列のインデックスを 受け渡すようなプログラムばっかりだ。 うちの会社。
場合にもよるが、かいつまんで言うと低レベルってことか
ポインタを使わなくてもなんら問題ないしな 無理して使わなくても良し
843 :
837 :2006/08/02(水) 09:31:34
一見複雑そうなポインタも簡単に分解する方法があるんだけどね。
方法が分かれば
>>834 の間違いもみんなすぐ気づくよ。
アドレス→住所に例えて説明される→間接的な概念 ってことか! いや、すぐにわからなくて、ちょっと気になってた。
ポインタを使用する、ちょっと込み入ったプログラムを作るとき いくつかの箱と、その間を結ぶ矢印でできた図をチラシの裏に書かずに いきなりコードを書きはじめるやつがいる。 たぶん、余程の天才か余程のアホのどちらかだ。
普通じゃん。それともあんたは「餓鬼の頃は紙に書かないとできなかったようなこと」を 今でも紙に書かないとできないのか?
込み入ったプログラムで、複数の人とやりとりする場合、コードのみでどうこうしないで まず参考になるイメージや図を作ってから取り込むのは常識だよ。 そういうのが無しでもやれるって言う自分がすげーって思われたいなら論外。 大きい場所を知らない小さい会社か?
848は正論だと俺は思うが、たかがポインタ如きで図を描く必要は無いだろ。
850 :
デフォルトの名無しさん :2006/08/04(金) 02:44:00
っつーかポインタ生きろ、絶対に死ぬな。嫌う奴なんかに負けるな。 いや、嫌う奴は使わなきゃ良いだけだ。
「ちょっと込み入った」の基準が人によって違うってことだろうな
俺もリファレンスだけで生きてゆきたい。
おやおや、>846にはなかった条件が>848でわらわらと増えてきましたな。 それとも「ちょっと込み入ったプログラム」とは「複数の人とやりとりするような規模のプログラム」だと言いたいのか?
ポインタの52%は見栄で出来ています ポインタの34%は野望で出来ています ポインタの7%はマイナスイオンで出来ています ポインタの4%はお菓子で出来ています ポインタの3%は言葉で出来ています
>>853 「込み入ったプログラム」は絵に描かないと判らない、というレベルの人が
「複数の人」の中にいるんだろう。
上手いことを言う。
自分一人で作るプロジェクトだったら別に良いけど ポインタに限らず、まずは紙に流れを書いてやる方が ミスがあったときも気づきやすいけどな まぁ、ポインタだけに焦点を置くなら、別に紙に書かなくても良いがw
そもそもなんで紙なんか持ち出す必要があるんだ? 目の前には広大なキャンパスがあるというのに。
別に”紙”が重要なんじゃない、あくまでもプロセスのイメージを 分かりやすく記述すると良いってことでしょ あまり人のやり方にいちいちケチをつけない
大体の流れ(ライブラリやエンジン単位)は紙に書くけど ポインタがどうのなんて紙に書いてる時間がもったいない 何のための開発環境だよ
アスタの3連が当たり前に使われてたコードは 図解で説明されても理解できなかった。freeするの命がけ スパゲティ書ける人尊敬するぜ
アスタの3連は流石にもう見かけないなあ。 リストなり配列なりは、テンプレートの中に隠蔽するだろうし。 STLとboost::arrayができてから、ポインタの出番は激減したす。
実際C言語でなければならない状況ってほとんどなくね? C++のコンパイラが安定しなかったり準備されてなかったり性能が劣っていたりしたのも、 いまは昔の話なんだし。 宗教上の理由で使ってない現場も見かけないじゃないけど、組み込みですら C++使ってて困ることってない。 C99とかはプロ仕様だなーとは思うけど、ランタイムに影響与える様な変更はほとんどないし、 C++が普通に使える環境では存在意義が疑わしい気すらする。 過去の資産の関係で移行を見送ってる場合もあるんだろうけど… ポインタが万能すぎる必要以上に強力な概念なことは自明だし、使う必要のないところでまで使うことはない。 でもってC++だと、参照とコンテナ類のテンプレート化だけででも、ポインタの出番は大分減らせられる。 もちろんこの程度の範囲で済む変更なら、生成されるバイナリの質は変わりゃしないし… とか思うんだけど、どうさ。
>>864 概ね同意。C指定のプロジェクトでポインタを極力意識させないような関数作ってて
ふと気づくと劣化版クラス特化コンテナになっていることに気づくときがままある。
C++を便利なCとして使うなら、「C++使う意味無くね?」って意見もあるだろうな。
Cを便利なアセンブラとして使うなら、「C使う意味無くね?」って意見もあるだろうな。
ちょっと便利ってだけでCとの互換性捨てる必要があるかという判断基準もあるってこった。
そもそもCとC++はリンクできるし、ほんのちょっと修正すればCもC++として コンパイルできるからいいんじゃね?
そういうのもあるって話なんで、お前の判断はこの際どうでもいいんだよ
「C++が普通に使える環境」じゃないことはいっぱいある。 たとえば組み込み系はARMやSHばかりじゃないんだよ。
>>872 そうなんだろうけど、話にしか(もっと言うと風の噂にしか)聞かないんだよな。
単に業界の違いなんだろうけど。
具体的にどんな環境がそうなん?
>>873 ハンディターミナルで、WinCE載っけてないヤツとか。
ヘタすりゃBASICのみ。(QRコードを開発した某社とか)
有名どころのプロセッサ使ってても、専用ライブラリが
抱き合わせの開発環境 (C しかない) でしか使えなかったり。
話ぶったぎるようで申し訳ないが言わせてくれ 自宅で飼ってる kernel が ABI失調症で危篤。 恐るべしG++言語
G++ !?!
ゴキブリが出てかみさんが食欲なくして夏痩せでオパーイ縮んじゃった??
gpp?
それにしてもこのスレのタイトルからは熱く激しいパッションが伝わってくるよな…
デンデレッデレレ デンデテレッデレレ
ヘェーラロロォールノォーノナーァオオォー
>>879 そりゃそうだよ。ポインタを扱ってるんだもん〜〜〜ん〜〜〜ん〜〜〜(←左胸を叩きながら読むこと)
そりゃそうだよ。ポインタを扱ってるんだもん〜〜〜ん〜〜〜ん〜〜〜(←左胸を叩きながら読むこと)
左の胸を叩かれたら右の胸を揉ませろと言いましてですな。
知ってる知ってる! それ油ハム法典とかいうやつでしょ? 上の口をふさがれたら下の口を差し出すとかいうやつ
886 :
デフォルトの名無しさん :2006/08/23(水) 06:19:17
俺もポインタは嫌いだけど、 ポインタを使わないと世界中に溢れている良質のコードの再利用が 出来ない。ひとりでやっていると死ぬほど時間がかかる。 ポインタが嫌いとか好き嫌い言ってると体の調子を崩すよ。 健康にいいんだから、食べなきゃ。エネルギーに変えなきゃ。 せっかくメモリのアドレスを覚えてくれる便利な変数があるのに使わないとね。 ポインタにも型があったりして、キャストしたりして型変換できるよね。 ポインタに型がなかったら、そのポインタがさしている入れ物の大きさがどれくらいの大きさなのか わからなくなっちゃうよ。配列の場合、次の要素がどこの番地か分からなくなる。 ポインタにも型があるから、複雑に感じるのかな。いや、ポインタのポインタとかも何でもありだから複雑なのかもしれないね。 でもCOMっていう便利なインターフェースを使うと、そのポインタのポインタっていう考え方が必要になったりするんだ。 俺もポインタは嫌いだけど、 食べるよ。エネルギーに変える。最後はうんこになる。そう、うんこ。俺のうんこ。 ポインタはうんこ。
>>886 生のインターフェースをを扱わなければ、COMでもポインタへのポインタは特に必要ではないぞ。
VC++なら#importとかね。
>>886 >俺もポインタは嫌いだけど、
>俺もポインタは嫌いだけど、
二回言うほど苦手なのは判った。
>886 なんかのコピペ?
私は、レーザーポインタを使うのがへたくそなんです。 いつもいつも、違うところばかりさしてしまいます。 こんな私に、ポインタの使い方を教えてください。
レーザーポインタをプレゼンで使うのは間違っていると思うんだ。 普通に指示棒で指した方が、発表者も使いやすいし観客も見やすいハズ。
クラス変数が実体化されたときのアドレス格納の役割をするポインタはさらに難易度が増します。 クラスの中にあるメンバ関数を呼び出す事だって出来るのが最強なのです。 アロー演算子? -> こいつが最強なんです。 どたまの悪い俺から言わせて貰えば、クラスを格納したポインタ変数でもない、そんな普通のクラス変数に アロー演算子を使ってみたりするドジとか余裕でやっちゃいます。 おまけに、関数の引数で参照渡しの使いどころを間違えてみたり、ありえない引数とかを余裕で設定するんです。 ポインタが俺に及ぼす影響は計り知れない。ポインタのゴミの消し忘れとか日常茶飯事。 Windowsベースのプログラミングをしてるとコードが長くなりすぎて、 自分が今、ここで何の機能をプログラミングしなければいけないのかさえ、わからなくなるんです。 そんなときにもポインタが、俺の前に立ちはだかる。 なんつうの、いわゆる混乱? そんなんだから、他人の書いたコードとか理解するのに相当な月日が流れる。 もうそんなこんなで30になりそうです。え、もっと勉強しろ。任天堂DS買え? そうなんです。そういう次元なんです。 本業じゃなくて、よかったです。
本業だろうが趣味だろうが,プログラミングはやめたほうがいいと思う
>>892 単に設計方法や構造の組み方がおかしいだけかと
まあCのプログラミングの8割はメモリ操作なわけで こんなコンピュータ内部の動作のために人間様の貴重な 時間と脳力使ってられるかってところが現場の本音なわけで 特に今のJavaやスクリプト言語のようなポインタのない高級な 言語の蜜の味を知ってしまった人達は心からそう思うわけで だからポインタなぞわからなくとも恥ずかしくもなんともないわけで つまるところポインタ氏ね。
>>896 そのスクリプト言語やらの土台は誰がどう作ってるのか考えてるのかよ?
ポインタが一体、実際に何をさしているのか、それがわかれば簡単ですが、 それが直感的にわかるまでが大変です。 そして 変数の前にくる、このお尻の穴のようなもの「*」がポインタ変数に付くと、 そのポインタの中身を示すようになるのが、なんともやらしいことでありまして、 さすがはお尻の穴だなぁと感慨深く思います。 この、*がお尻の穴のようなものに見えてくると、もうプログラミング所ではなくなり、 皆さんのご想像する結果となってしまうわけです。 しかし、 大事なのは、この、お尻の穴の代わりに、このような&雪だるまさんを変数につけると、 通常の変数でさえもポインタの役割にちかいことをやってくるます。 はい。みなさん勉強になりましたね。 それでは、普及がてらみなさんごいっしょに。せーの。 「雪だるまにお尻の穴は絶対必要!」
900 :
デフォルトの名無しさん :2006/08/25(金) 03:27:30
ごめんなさい。
レス番の一桁目が0の奴は死ね。
間接キッスが好きな奴のやることがポインタ。 あ、うまいこと言ってもうたやん・・・
903 :
デフォルトの名無しさん :2006/08/25(金) 07:26:37
ポインタには泣かせられるぜ。
出したり入れたりして犯してやったぜ #include <stdio.h> int main(){ char *p="pointer"; puts(*&*&*&*&*&*&*&*&*&*&*&*&*&*&p); return 0; }
>>896 Javaにポインタが無いとはなんのご冗談のおつもりで?
ぬるぽ
ガッ ・・・はjavaにもあるんだな。 つまりポインタは本当に存在したんだ!! なんだってー (AA略
何気に>>886-
>>904 を読めば、ポインタのことが勉強できるようになっているのが、
ここ最近のポインタじゃなくてポイントですね!
910 :
デフォルトの名無しさん :2006/08/25(金) 23:31:15
でも、こんな調子の参考書なら間違いなく、買わないな。
911 :
伊藤 :2006/08/26(土) 08:37:17
死ねばいいのに
ポインタがあって射精する程感謝した事は?
グローバル変数を極力抑えられる
914 :
デフォルトの名無しさん :2006/08/26(土) 12:35:35
引数渡して戻り値じゃダメのか? ポインタの必要性が今ひとつ分からん
>>914 戻り値で返せるような変数の個数だったら良いよ
配列や構造体はどうするよ?
戻り値は一つだけだしね。 でもなぜポインタを使わなければいかないかって説明するのめんどくさいよ。 外部変数と自動変数の挙動とか値渡しの意味とか、その辺理解してないと scanf("%d", &i); の&がなぜ必要か理解できないからねぇ。
あとは、値をそのまま渡すと渡した方で変数確保するから ポインタつかった時と比べて遅いんだよね それが3個4個なると・・・ さらに、渡すのさえ面倒 構造体にまとめれば一個渡すだけでできる
あぁすまん、「値渡した先で領域確保」だな
(;´Д`)ハァハァ
まあそう書きたくなる気持ちはわからなくもない。
参照渡しがなければポインタの値渡しするしか他にねーだろ
ポインタを使ってないプログラムはいつ出ますか?
インストラクションポインタさえ使わないプログラムは、まだ数十年は出てこないでしょう
d
>>927 「事実上」とは「現時点での事象」であり、
一方「永久に」とは時間軸上の未来をも含むため
矛盾が生じています。
つ【ワイヤードプログラム】
ポインタを意識しないでいいプログラムは山ほどある。
ポインタが嫌でも問題ないさ。配列使えよw
実際std::vectorとかboost::arrayとか使い出すと ポインタの出番って本当減るよな。 真の意味でポインタが必要な状況なんて殆ど無い、あとは参照で事足りる。 ぬるぽに意味を持たせたいだけ、ちょっぴり出番があるくらいか。 いや、リストとか自分で書いたら、嫌でも顔だすけどね。
参照ってポインタ使ってるんだと思ってたけど違うんかな。。。
もちろん、実装的には何も変わらないよ。 単にアドレス演算の機能を奪い取っただけのポインタ。 そしてNULL状態が存在しない。 これがでかいのさ。
いちいちNULLかどうか心配せずに使えるポインタというか、そういう感じかな。
うっかりさんが前後に値をスライドさせることもないよ。
配列もポインタも同じだろ。
全く異なる概念だと思うが
たまたまCの実装がそうなっているというだけだろ。
Cが諸悪の根源。 Cがプログラマにとって大切な存在になってしまったことが最大の癌
やむをえずコンパイラを甘やかす為の仕様や記法が正解になっている世界だから
>>941 そんなお前はA、Bすらやっていないくせにw
A みつめあう B お話をする C 手をつなぐ どーせ、Aもまださ
世間のABCはそんなにヤワじゃない orz
(・3・) エエー、ビビって、シッコ漏らしてんじゃねーYO!
なんだ、最近の輩はA言語やB言語も知らんのか
C++で template <int N> void func(int (&a)[N]) という風に配列を受け取れるのは意外と知らない人が多い。 この場合、aの型はint *ではなく、int [N] である。 まあ中にはint *としてしまう糞なコンパイラもあるが。
>>948 いや、aの型はint (&)[N]だろ。
>>949 typeid().name()は試してみた?
>>948 その書き方大好き。
でもint*になるコンパイラ多すぎ。
実は処理系依存なんじゃないのか?
詳しくないけど。
規格票で解説してあるといいね。どこを見ればいいのかな?
>>950 typeidにT&型のオブジェクトを使用しても、参照だからTを見に行ってしまう。
だからtypeidで確認するのは無意味。
typeid()で同じと判断されたら、同じだと思っていいんじゃね?
>>948 #include<iostream>
template <int N>
void func(int (&a)[N]){std::cout << typeid(&a).name();}
int main(){int a[10];func(a);}
dmc,g++,clで試してみたけど全部int[10]と認識されていたけど、
どこのコンパイラの話?
BCCはint*になる。
古いgccもHPのccもVC6も確かダメだな。 >template<typename T, std::size_t N> inline std::size_t numberof(T (&)[N]) {return N;} これが通らない。
VC6のテンプレート回りはへっぽこさんだから… テンプレートスレになっとるがな。
>排除であるが、 Ocamlもやはりポインタ的な物を含んでいる。
Ocamlのポインタ的なものって、参照とかmutableフィールドか? そうすると、この人の目指すところはHaskellあたりにしかないのだが。
配列とポインタって、概念が違うだけで、実際には同じじゃね? つうか、配列使うな。 ポインタも使うな。 使っていいのは、リスト構造。
>>962 Cのポインタは事実上配列にアクセスすするための一手段と化している。
確か標準関数で文字列周りはポインタで渡してたな
いいか、ポインタの代わりに、メッセージIDを使うんだ。 欲しいオブジェクトのデータを貰うためには、そのIDとオペレーションを書いてメッセージボトルに入れて、海に流すのさ。 そうすると、メッセージボトルを受け取った相手が、それが自分宛でなければまた海に流す。 繰り返すうちにいずれは宛先の相手に届くからな。 目的の相手に届いたら、メッセージに書かれてるオペレーションを元に結果をまたボトルに入れて海に流してくれるんだ。 さあ、こうやって直接メモリーの番地を指定しなくとも、あいてに伝わる方法はあるのさ。 相手が受け取るまで手渡しリレーでもいいから、ポインタなんて使わなくていいのさ。
>>965 そのメッセージIDをポインタと呼称しても、違和感無く他人に通じると思うよ。
「ここの作業よろしくね」 っといってその場所を書いた紙を作業者に渡す 場所を書いた紙 = ポインタ
結局、ポインタと配列って、見方を変えただけの物だと思うよ。 家と言う入れ物に住所が書いてあるのは、配列に番号が振ってあるのと同じ。 ある規則によって振られた識別子ね。 ポインタというのは、強いて言えば、東経135度23分xx、北緯32度26分xxといったたぐいのもの。 機械の中身の厳密なメモリーの位置ね。
>>967 ポインタとは違うが、最近のCPUではメモリアドレスも仮想化されて、
何段かテーブル参照をしてようやく物理メモリのアドレスを得ることもある。
それがなんだか漂流とは違うけど、似たようなものを感じ取った。
ポインタの主な使われ方の一つに連続要素の参照があるだけで 全然違うものだと思うんだが。
配列を覚えるだけで、 ポインタを完全に使いこなせるようになるなら同じものといえる。 そうでないなら実質的に違うもの。
Cみたいに配列とポインタに違いを見出せない人がいるほど密接な言語ばかりではないんだよ。
>>972 それって配列は知ってるけどメモリ上にどう格納されてるのか知らないから
違うって話じゃないのか?
>>974 いや、学習にかかるコストの話。
ポインタを使うには、ポインタ演算や間接参照、ポインタのポインタ、
ヌルポインタの対処など色々学習する必要がある。
同じと見なすには新たに覚えることが多すぎるのでは?ということ。
>>975 まぁポインタ習得は結構時間かかったけどな
でも苦労しただけの価値はあると思うよ
ポインタ知らない頃のソース見ると多重ループの山で
ソースが画面右はみだしてたからな
昔すぎてよく憶えてないけど、 ポインタ使うのにそんな苦労した記憶ないなあ。 僕が読んだ本ではかなり最初の方でポインタの解説してたし ソースをガリガリ書くようになったのは一通り覚えた後だったからかな。
覚えちまえば何のことはないし、 何で覚えるのに苦労するのかすらわからなくなるが、 初めて出くわした時には確実に蹴躓いてる、それがポインタ。 つーか実のところポインタが難しいんじゃなくって、それで実装される リストとかのデータ構造の学習が難しいんじゃなかろうか。
俺は機械語→アセンブリ→PL/M→C と来たから
なんでポインタが理解できないのかが理解できない。
>>978 後段落
それはない。それ以前で躓いている。
ポインタの方が効率的で解りやすい時もあるよ。 なんでもかんでも配列でやるのは、かえって複雑になるよ。
ポインタで躓いた記憶はあるけど、いつの間にか使えるようになってた。 「こういう時にこう使うんだ」って体験を積み重ねていけば、 その内体で覚えられるんじゃないかな。
ついにこのスレも980超えたか
煽り気味のスレタイのわりに面白かった。 やっぱそう思う人が多いってことなんだろうな。
Cで最初に蹴つまずく壁だろうからなー。 読んだことは無いが、Cのポインタだけで一冊書いた本とか出てなかったっけ。 一冊分も書くことがあるのが不思議ではあるが。
ポインタ完全制覇は結構面白かった
以下ポインタ完全制覇の要約で感動のフィナーレ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
988 :
デフォルトの名無しさん :2006/09/08(金) 03:42:46
ポインタが完全制覇できます
989 :
デフォルトの名無しさん :2006/09/08(金) 03:43:23
〜 完 〜
991
992
993
994
995
996
aa
998
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。