[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 19:54 / Filesize : 171 KB / Number-of Response : 914
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ポインタはどうやって学ぶべきか



1 名前:デフォルトの名無しさん [2007/10/24(水) 04:07:56 ]
なんと!意外にもスレが無かったので立ててみました

先日のソフトウェア開発技術者試験午後UのB木のポインタ表現
近年の基本情報技術者試験の午後C言語問題の自己参照構造体
など物凄く出来が悪いです。

ゆとり?文系?自作減少?
ブラックボックス化されてメモリ管理やコンピュータの細かい知識が不要となった?

本当にポインターは必要なのか!?議論しましょう

547 名前:デフォルトの名無しさん [2007/11/30(金) 19:38:14 ]
そうして中国に追いつかれることに気付かない日本人。
私は自分のためにCやポインタを勉強する。

548 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:40:59 ]
お前がバカなんだっつの

549 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:41:40 ]
まともなコードが書けない奴が、まともな設計できるわけねえし

550 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:43:55 ]
他にも勉強する事が多くてなぁ・・・
まともなコードが描ける頃には髪の毛白くなってそうだよ

551 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:47:09 ]
コード書きは全てに優先するんだよ
無知か?おまえ

552 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:48:00 ]
なかなか粗悪な暇の潰し方だな

553 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 20:02:31 ]
職人みたいに低能頑固薄給視野0になりたければ
コード書けばいいと思うがなw

コーダーなんてインドから集めてくればいい

554 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 20:04:25 ]
コーダ以外コード書く必要ないと思ってる化石か

555 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 20:05:04 ]
マ板でどうぞ



556 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 21:20:07 ]
GoogleやMSの社員もコード書いている件について

557 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 21:41:59 ]
マネージャクラスでもな

558 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 21:43:34 ]
それが普通

559 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 21:47:34 ]
じゃあなんで日本のマネージャクラスはコード書かないのが多いの?
なんで日本の文化ではコード書きは底辺がすることって信じられてるの?

560 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 21:52:06 ]
typedef void* NULL;

#define NULL 0

561 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 21:58:37 ]
>>559
それが一番妥当かつ効率性が高いとう結果
なんだよ。結局コードなんて書いても成果を
出しましたって小細工しているにすぎないからな

562 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 22:01:24 ]
日本語で

563 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 22:07:28 ]
>>556-558
書くモノしか見てないけど Google とか技術部いい感じだよね。
Norvig さんとか。

564 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 22:23:07 ]
いい感じじゃねーだろ

565 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 22:39:04 ]
英語身に着けて外国でもなんでもいけばいい。
コードも書けない奴の言うことなんて誰もきかない。



566 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 22:49:30 ]
視野が狭すぎてすげーなw

567 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:08:53 ]
昔と比べてコードの抽象度が高いから、自然言語を使う必要性が減ったってことでしょ
コーダにコーディングをアウトソースするときに、インプットとして「コード」が必要になったってこと
昔と大して変わってない

568 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:25:48 ]
今日帰りにインド人がやってるカレー屋に行ったんだけど、
カレー注文したらスプーンがついてこなくて
「あ、本格的な店なんだ」とか思って手で食ってたら、
半分くらい食ったときに、インド人の店員が奥から
すげー申し訳なさそうな顔してスプーン持ってきた

569 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:34:53 ]
>>568
おもしろいコピペがあったら貼るスレinマ板part4
pc11.2ch.net/test/read.cgi/prog/1194955716/l50

570 名前:デフォルトの名無しさん [2007/12/04(火) 15:03:58 ]
>>128

571 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 17:44:08 ]
>>128
が改悪したようにしか見えない件についてw

572 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 21:58:52 ]
うおおぉぉ!
Javaばかりでプログラム組んでいてC++にに戻ってきたらメモリ管理だるすぎて泣きそうだw
Javaはメモリ管理が楽だからいいよな
よくC#、Javaはポインタがなくて良いとか言う奴いるけど、これらの言語の利点はメモリ管理の楽さだろと突っ込みたいぜw
それにC#、Javaはむしろポインタの固まりだしな

C++のメモリ管理の経験があると、ガーベジコレクション等に負担をかけず高速なプログラムを組めることが身に染みてわかったぜ、自動解放だからってテキトーに組むとメモリリークは発生しないにしろ遅いなw
結論、C++のようなメモリ周りがシビアな言語をやる価値は今でも十分すぎるほどあると

573 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 22:40:35 ]
C++ならスマートポインタ使えばいいのに

574 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 22:52:08 ]
違う違う。

C++ならスマートポインタ実装すればいいのに

575 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 07:28:30 ]
俺は、自分でメモリ管理しないと、不安でしょうがない。
JavaやC#だと、本当にリークしてないのか不安になってたまらない



576 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:56:30 ]
aho

577 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 15:47:48 ]
GUIでガベコレの遅延がはっきり感じられるとつらいね
元々もっさりなのに時々かくかくではストレスもたまる

578 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 16:24:29 ]
なんでそうなるコードを書くの?

579 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 17:21:57 ]
リソース管理が自動化されてる言語しかやったことがない、とか

580 名前:デフォルトの名無しさん [2007/12/13(木) 16:16:38 ]
int array[10];
で&arrayってvoid*?

581 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 16:52:14 ]
int**

582 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:04:52 ]
自己レス
int (*)[10]か。

>>581
あれ?それでもいいの?
試してみます

583 名前:デフォルトの名無しさん [2007/12/13(木) 17:13:53 ]
配列のポインタと、ポインタのポインタを間違えるな

584 名前:582 mailto:sage [2007/12/13(木) 17:24:09 ]
int**はダメだた・・・

585 名前:デフォルトの名無しさん [2007/12/13(木) 17:32:46 ]
>>572
俺にはC++のメモリ管理がだるいと感じるお前が理解できない

new したらdeleteすればいいだけじゃん

なにがだるいんだか・・・





586 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:36:05 ]
それがだるい。

587 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 18:31:19 ]
>>585
C++のメモリ管理ってスマポンタだろ

588 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 18:33:31 ]
>>580
配列名だけで先頭要素のアドレスになる。
ただし、それは変数じゃないので&を付けても無駄。

int array[10];

printf("%p¥n", array);
printf("%p¥n", &array);

で試してごらん。


589 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 18:34:41 ]
>>586
よきにはからえ、じゃないと駄目だよね。
ゆとりプログラミングの時代さ。

590 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:24:19 ]
>>588
arrayは配列の先頭要素へのポインタ
&arrayは配列へのポインタ
だから値は同じだけど意味が違うんじゃないですか?

591 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:51:16 ]
>>589
コンパイラ使うのも似たような言葉で馬鹿にされたものだけどね。

592 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:53:28 ]
>>588
違う。
arrayはポインタでは「ない」。
ポインタは変数。配列名は定数。

593 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:57:39 ]
単にarrayと書いたときに「どう解釈されるか?」の話じゃないの?

594 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 22:11:13 ]
アレーイ?

595 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 23:43:50 ]
アルェーイ?



596 名前:デフォルトの名無しさん [2007/12/14(金) 10:44:32 ]
配列とポインタは違うのに同じだ、
と言うニュアンスでK&Rで解説されたために、
その後のC言語の入門書で、
よく分ってないヤツがゴチャゴチャにして説明するようになって、
今に至る

597 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 11:49:52 ]
基本的に違うけど引数としてはどっちでもとれるって状況
だと思うが引数として使うってのが
けっこうメジャーな使いかたなためごっちゃになってるって
状況だとおれは認識してる。

598 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 11:55:35 ]
>>597
>基本的に違うけど引数としてはどっちでもとれるって状況
間違い。
引き数としては、常にポインタ。
# 但し、Cの場合。

599 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 12:36:31 ]
学校で課題で「配列とポインタの違いを説明せよ」みたいなのあったなぁ・・・

600 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 16:41:13 ]
>>585
自分がnewしてdeleteするなら別に面倒では無いだろうけど
リスト構造でなおかつ、その構造が要素追加にnew、削除にdeleteを使うようなプログラムはが何万行と続くとデバック作業がかなり面倒だろ?まあ、それはそれで利点もあるがな

それを面倒臭くないというお前はすごいな、それとも極小規模なプログラムしか組んだことないのかな?

601 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:58:01 ]
>>599
配列は箱を列に並べたもの
ポインタは矢印
でいいかな?

602 名前:デフォルトの名無しさん [2007/12/14(金) 18:43:34 ]
>>601
大学のレポートって、お絵かきでOKなの?

603 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 18:59:17 ]
>>598
そういうことじゃなくてポインタ変数でも配列変数でも
代入できるだろうって意味。

604 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:25:33 ]
住所そのものと住所を書いた紙が別なのは当たり前だろが
住所そのものを変えるには市町村合併でもするほかないが紙に書かれた住所を書き換えるだけなら簡単

605 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:31:58 ]
>>604
なんかオブジェクト指向の例え話なみに微妙な話だな



606 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:50:48 ]
たとえ話に住所って言葉を使うのが間違ってそう

607 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:54:39 ]
ポインタなんて
[C言語 ポインタ完全制覇]
読んで理解したなら
後は、実践を繰り返すだけだろーよ

608 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:56:31 ]
どんなに微妙でも人間の脳構造はアナロジーの利くものの方が
覚えやすくできてんだからそれでいいじゃんよ。

609 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 20:05:30 ]
C FAQの6.13
www.kouno.jp/home/c_faq/c6.html#13
c-faq.com/aryptr/ptrtoarray.html

・・・本当に配列そのものへのポインターが必要な場合は「int (*ap)[N];」 のような表現を使う。
 ここでNは配列のサイズを表す(質問1.21も参照)。
 配列の大きさがわからない場合、Nを省略することができる。
 しかし 結果として得られる「大きさが未知の配列へのポインター」は役に立たない。

ってあるんですが、
int array[10];
int (*ap)[];
ap = &arrrayってエラーにならないんですか?

610 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 20:17:14 ]
>>609
配列の不完全型ってヤツか?
良く分からんが、違う構造体同士で相互参照する時なんかに使う
構造体の不完全型の親戚みたいなもんかな

611 名前:デフォルトの名無しさん [2007/12/15(土) 02:27:42 ]
>>609
試せば良いじゃんよ

612 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 02:32:55 ]
VC++ExpressEdition

d:\work\vc\array\arrayptr.cpp(9) : error C2440: '=' : 'int (*__w64 )[10]' から 'int (*)[]' に変換できません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。



613 名前:デフォルトの名無しさん [2007/12/15(土) 04:19:56 ]
Cより先にアセンブラやれ!!
アドレスの概念を理解しないでいきなりやるから
難しくなるんだよ!!


614 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 05:35:26 ]
それも極端な話だなあ、と思う反面確かにそれが近道だよなあと思っているおれがいる

615 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 08:55:36 ]
ちょっと疑問なんだが、配列自体が先頭のアドレスを示しているのに、
さらにそれのアドレスが欲しい場合ってどういうケース?想像つかないんだけど。



616 名前:デフォルトの名無しさん [2007/12/15(土) 10:40:49 ]
こんな感じなら理解できるか?
#include <stdio.h>
#define N 5

void aryfunc(int ary[N][N])
{
int *temp;
for(temp = &ary[0][0]; temp != &ary[N-1][N]; temp++){
(*temp)++;
}
}
int main()
{
int ary[N][N] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},
{16,17,18,19,20},{21,22,23,24,25}};
int *temp,i;
for(temp = &ary[0][0],i = 1; temp != &ary[N-1][N]; temp++,i++){
printf("%d ",*temp);
if(!(i%5))
putchar('\n');
}
aryfunc(ary);
for(temp = &ary[0][0],i = 1; temp != &ary[N-1][N]; temp++,i++){
printf("%d ",*temp);
if(!(i%5))
putchar('\n');
}

return 0;
}

617 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 12:11:15 ]
>>615
配列の配列とか、配列の配列の配列とか、つまり多次元配列を
関数の引数として渡すときに必要だな

619 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 12:15:46 ]
>>615
配列名は、配列の「先頭の要素」のアドレス。
配列名に&をつけた場合は配列「そのものの」のアドレス。

ポインタの値としては同じ値だが、意味が違う。

なんか思い違いをしてる気がするぜよ

620 名前:615 mailto:sage [2007/12/15(土) 12:48:40 ]
>>618
多次元配列も、型と先頭アドレスと要素数を何らかの形で渡せばいいわけだから、
アドレスに関しては配列名のみを渡せばいいんじゃないの?

>>619
意味の違いは理解してるつもりだが、これじゃなきゃできない、というケースが思いつかなくてさ。
先頭の要素のアドレスと、配列そのもののアドレスが違うことがあれば理解もできるってもんだが…

621 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 13:12:30 ]
&つけようがつけまいが
値同じだから意味は同じ

しょうもねー議論してるんじゃねーよw

622 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 13:22:07 ]
そんな乱暴なw

623 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 13:54:30 ]
>>621
型が違うから意味は違うだろ

624 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 14:29:01 ]
>>621
おまい、ポインタはvoid*さえあればいい派だなw

625 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 14:51:34 ]
void *と
void **あれば何もいらねーだろ。

型に束縛される書き方してると
汎用性失う言語だし

携帯のドライバなんかは
int Inithoge(void * data1, void *data2, void *data3)
こんなの普通だぞ?



626 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 15:01:07 ]
携帯用のドライバなんかどうでもいい

627 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 15:42:40 ]
www.kouno.jp/home/c_faq/c6.html#18

>>配列の配列は、ポインターへのポインターに成り下がることはない。
これを読んで思ったんだけど、
int main(int argc, char **argv)は間違い(行儀が悪い)で、
int main(int argc, char *argv[])が正しい(行儀が良い)の?

628 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:45:17 ]
const char* const argv[] って書きたいところだけど

631 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 06:01:17 ]
ポインタの配列と、配列の配列の違いを、
いくら説明しても全く理解できないヤツ、
会社に一人くらいいるよな・・・

プロのプログラマーのはずなのに

632 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 06:05:55 ]
・ポインタを「何かを指している矢印」
・配列を「何かが入っている箱」
という図を描いてみて、その上で配列の配列とポインタの配列を描いてみればすぐわかると思うんだけどな。

633 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 11:13:25 ]
>>631
専門書籍で使われてる言葉をそのまま使っても伝わらないよ
一度日本語に直す、相手に伝わる言葉に直す
そういうリファクタリングを繰り返してバカ矯正プログラムが完成するんだ

634 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 16:47:55 ]
ダブルポインタと呼ぶのはやめてほしい

635 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 17:07:40 ]
図ばかり頼りにして、言葉を大事にしないのは、理系プログラマの欠点だ



636 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 21:45:05 ]
文章から何かをイメージする能力が読む側に備わってない
理系文系だ関係なく読解問題が苦手なの増えてるだろ?
だからこっちでイメージを用意してやりようやく相手が理解できる
マンガと同じだわ

637 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 22:15:45 ]
そうゆうこと
嫌韓を読めばよくあの国が理解できるのと一緒

638 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 22:49:12 ]
嫌韓って漫画じゃねえよあれ。カット集じゃん
全編挿絵っつうか

639 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 23:05:44 ]
マジレスすること自体
ゆとりだと自己主張しているものだな。

このスレ削除でよくねーか?

640 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 23:08:20 ]
時々思いがけない議論があってちょっと楽しいから
削除しないで放置しておいて欲しい

641 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 23:13:43 ]
マジレスでもなんでもないだろw
どんどん話題が枝葉にそれてるだけで

642 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 00:08:20 ]
まず、学ぶべきことを定義するのが先じゃないか?
  アドレスの代入、アドレスが示す値の参照
  関数へのアドレス渡し
  ポインタを利用するアルゴリズムを理解
こんな感じでさ

643 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 00:14:32 ]
レス600過ぎてから定義されてもwww

644 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 01:39:57 ]
老いて益々盛んってことわざもあるし
人生に手遅れって言葉はないと思うんだ

645 名前:デフォルトの名無しさん [2007/12/17(月) 04:57:57 ]






646 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 11:54:52 ]
図に書いて説明するより、ソースレベルデバッガでポインタ変数にどんな値が入って、
その値が指すアドレス(とその前後アドレス)にどんな値が入ってるのか
見せた方が分かりやすいと思う。

647 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 12:32:54 ]
>>646
ポインタの実際の値がいくつなんて、
どうでもよいことじゃね?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<171KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef