トップページ⇒tech
125コメント41KB

プログラミング言語

■ このスレッドは過去ログ倉庫に格納されています
0001北米海外生活板使者NGNG
北米海外生活板にアメリカの大学で(一応自称全米TOP10らしい)
情報工学を学んでるAΩというコテハンがいます。この男Javaが
書けるようになるとCやC++を覚えるの楽だとか、Cの入門には
Javaがいいだとかちょっと?なことを発言しているのですが、
どう思います?リンクはっておきます。

http://teri.2ch.net/test/read.cgi?bbs=northa&key=980032074
0002名無しさん@お腹いっぱい。NGNG
そういうくだらないことは北米海外生活板だけでやってください。
0003デフォルトの名無しさんNGNG
うむ。キティをこちらに召喚しないでくれ。
0004デフォルトの名無しさんNGNG
これ以上厨房を増やさないで下さい。
0005デフォルトの名無しさんNGNG
逆ではないのか?
と言うか、俺はC/C++やってから、
Javaやった。
つか、やらされた。
0006デフォルトの名無しさんNGNG
120から引用
>>ちなみに当たり前すぎるが、プログラム系の板で、
>>Javaを勉強しておけばC/C++の覚えも早いなんて書いたら、
>>集中的にバカにされる(またはネタにされる)のは必至。

そう?

でもcで挫折してJavaをやってまたcをやるのがいいかな?
なんつったりして。
0007デフォルトの名無しさんNGNG
ドキュソ
0008デフォルトの名無しさんNGNG
>>1
俺も北米板時々覗くから、そいつは知ってる。
何にでも口を挟んでくる暇人留学生ね。
でも特に興味なしってことで。
0009デフォルトの名無しさんNGNG
もうそろそろsage
0010デフォルトの名無しさんNGNG
一応、ざっと読んだけど、そんな変なこと言ってないんじゃない?
まぁ、煽りにいちいち反応する辺り厨房だけど
0011デフォルトの名無しさんNGNG
寂しいんだろうな。俺もアメリカにいた時はさみちかったよ。
アメリカの大学じゃ最近はjavaから入るらしいじゃん。
言語のつまらない部分よりも、オブジェクト指向デザインとか
データ構造とかのプログラミングのエッセンスを教えるには言語は
シンプルな方がいいからね。
0012無党派さんNGNG
日本の大学もJavaから入るらしいよー。
0013デフォルトの名無しさんNGNG
ジャストシステムの新人教育も、Javaから入るらしいょー。
0014デフォルトの名無しさんNGNG
ということで、1が言及した留学生の言うことは、マンザラ根拠の無い
ウソではないと思うよ。
0015デフォルトの名無しさんNGNG
ark
0016デフォルトの名無しさんNGNG
その言語のつまらない部分ってどこよ?
0017名無しさん@1回転NGNG
あちらの板の方は落ち着いてらっしゃいますねえ。
0018デフォルトの名無しさんNGNG
>>16
例えばCのポインタみたいにおのおのの言語の特徴的な部分のこと。
言語は単なる表現手段でその下にあるコアの知識が重要ってことを
言いたかったわけです。
0019>1NGNG
Q:プログラミングを全く知らない学生が、オブジェクト指向プログラミ
ングのスキルを身につけます。JavaとC++のどちらを使って学ぶべきでし
ょうか。

元のカキコ読んだけど、AΩの言っていることは理解できる。AΩ に
反論している奴は、特定の言語学習に拘った視野狭窄の傾向。学生の
目標は特定の言語の学習ではないだろう。

だいたい「CとC++」だの「C/C++」といった表記はコンパイラの表記
としては正しいが、学習の表記としては間違い。中身はかなり別物。
中途半端な「C/C++出来ます」プログラマが一番使えない。
002019NGNG
学習の順番として
C -> C++ と学んだ学生よりも Java -> C++ を学んだ学生の方が、
絶対に筋がよさそう。その後の設計を学ぶ段階等を考慮しても。

ということで。私はファーストランゲージとしてCまたはC++を学ぶよ
りも、Javaを学ぶのに賛成です。
002118>>19NGNG
私も賛成、というか、すでに(まともな)学校じゃそのようになっている
ようですね。ちなみにCはもう省いてもよしって感じですね。

違うスレに書いてしました。
0022デフォルトの名無しさんNGNG
まあ、ただC++はCのスーパーセットだってことになってるんだから、
C/C++でいいんじゃないの?

それから、学校でJavaが導入されてるのかどうかはしらないけど、
もしそうなら、それは学習と言うより、実利的な理由だろ。
0023デフォルトの名無しさんNGNG
19がいうように初めて習う言語としてオブジェクト指向を学ぶには
Javaがいいって意見には賛成だけど、リンク先でつっこまれている点
は、値呼び出しとか参照呼出しとかを理解していない人間がJavaが
わかればCとC++が楽にわかるとか、JavaがCの入門になるといった
意見をAΩがいってるからじゃないの?
0024デフォルトの名無しさんNGNG
>22
19の言いたいことは分かるけどC/C++の表記にこだわるあたり
言葉尻を捕らえて遊ぶバッカー日本人の典型キティなので気にしない方がいいよ。
0025デフォルトの名無しさんNGNG
>>18
でもよ、
Cってのは、他の言語に比べて特別な存在だよ。
WinAPIもCベースで提供されているし、
UNIXに至っては、大部分がCでできてるよ。
だから、
他の言語の特徴的な部分は「つまらない」と言い得るかもしれないけど、
Cに関しては同じことはいえないと思うけど。
0026デフォルトの名無しさんNGNG
確かにオブジェクト指向勉強するには
Javaの方がわかりやすそうだよな。
C++で入った俺としては何ともいえないけど。
ただ、プログラム初学者用には向いているとは思えないんだけど・・・
Cの方がわかりやすいよ。
シンプルだし。
0027デフォルトの名無しさんNGNG
自分は
C−>Java−>C++
順番はこれで良かったと思っている
データの基礎をしっかり学んで
オブジェクト指向の概要つかんで
応用

まあ、その前にアセンブラの経験がなきにしもあらずだったので
万人に当てはまるかどうかは不明
002818>>25NGNG
WinAPIってバックワードコンパチビリティのためにあるんじゃないんですか?
M$の方針はどうなのか知りませんが。
unixはソフトウェア発展のさまたげになってますね。
と言ってる私もCでjavaのネイティブ関数書いてマス。Cは万能アセンブラ
ってことですね。
0029デフォルトの名無しさんNGNG
ところでみなさん聞きますけど、javaって事は
いきなりオブジェクト指向を覚えさせるんですよね?
じゃなきゃJavaプログラムなんてほとんど出来ないし・・。

変数、配列、構造体とかの理解がそこそこで
オブジェクト指向が理解できるんか???
俺は無理だと思うぞ。
0030デフォルトの名無しさんNGNG

   /)  /)
  /  ⌒  ヽ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | ●_ ●  | < >>29 理解できないのはおまえだけだよ
 (〇 〜  〇 |  \__________________
 /       |
 |     |_/ |
0031デフォルトの名無しさんNGNG
知識ゼロの人には、いきなりOO叩き込んだほうがいいかもしんない。
0032デフォルトの名無しさんNGNG
学生「その『関数』ってのはメソッドみたいなもんですか?」
0033デフォルトの名無しさんNGNG
↑あ、なんかショックだわその言葉。
0034デフォルトの名無しさんNGNG
OO とか文法的なこととは別に,C/C++ だと「絵を描きたい」とか
「ゲームを作りたい」とかいう「初心者の素朴な願望」が叶えづら
い(難しいし,環境依存だし)ってのがあると思う。昔は BASIC で
手軽に出来たけど。

Java なら,BASIC ほど手軽ではないけど,絵を描いて,ピコピコ
ゲームを作って,ってなことは,初心者の目標として非現実では無
いと思う。
0035デフォルトの名無しさんNGNG
学生「その『構造体』ってのはクラスみたいなもんですか?」
0036デフォルトの名無しさんNGNG
>>25
MacはpascalベースでAPI提供してるって知ってた?
俺は「これだからオモチャは!」と激怒したyo。

>>1
言語覚える順番なんて関係無いと思うけどね。
様は勤勉なプログラマか、厨房プログラマかだけ。
0037デフォルトの名無しさんNGNG
>>36
macは悪いけど、
あんまりメジャーな存在ではないし…
0038デフォルトの名無しさんNGNG
学生「つまり char * は String みたいなもんですか?」
0039デフォルトの名無しさんNGNG
>>36 いまだにそうなん?
むかし think c つこてたころは、pascal int some_entry(ptr a@` handle b);
なんて宣言があって仰天したけど。
0040デフォルトの名無しさんNGNG
>>35
縮小クラス
0041デフォルトの名無しさんNGNG
>>38
char*は、キャーケツメドと読みまして、銭湯でケツメド丸出しのオヤジに
驚いた時に使います。
0042デフォルトの名無しさんNGNG
>>39
OS-Xはどうなのか知らないけど、その直前までは確認。
MacのHandle渡しは無駄なんでやめて欲しいッス。
あぁ、あとリソースもね。
っつーか、ピザ食べようぜ!(藁
0043AΩ@北米海外板NGNG
どうも、渦中のドキュソ厨房留学生のAΩです。
自己紹介はいいとして、ことの流れを軽く説明します。

今から一ヶ月以上も前に、コンピュータ専攻の学生のためのスレで
一人の人が、Call by reference とCall by value について質問をしました。
結局そのときは具体的な回答が出てこなかったので
答えは推測で出しました。
質問者はポインターについて理解していないようでしたので、
「ポインターが分からないなら、それも理解できないのでは?」みたいなことを書きました。
私もその言葉自体聞いたことがなく、自分の想像できることを書いたまでです。
「たぶんこうなんじゃない?」くらいで、意見の押し付けや
知ったかぶりなどの行動は一切ナシです。
そのときはこれだけで終わりました。

そして昨日あたりから、このスレを立てた人物が行動を始めました。
それは1のリンクで参照できると思います。

この人物に対する私の見解は、「肩がぶつかったぞ、ゴルァ!」
と言ってくるチンピラと対して変わりません。
Javaに関して述べたことも、他の人が言うならOKで
私が言うと否定するのですから、嫌がらせとしか思えません。
0044AΩ@北米海外板NGNG
挙句の果てには、私の偽に踊らされて
ここにこんな板を立てる始末。
しかも、「こいつ、こんなこと言ってますが、どう?」ときたもんだ。
北米板での威勢の良さはどこにいったのでしょうか?
ちょっとでも詳しい人がいる板では、この変わり様。
ここでも自分の意見を貫いて欲しかったのですが、無理なようです。

これで1の目的は理解できたと思います。
プログラムの知識のない人間を踊せ、私にけしかけるためです。

関係無い争いに巻き込んでしまい、1に変わって申し上げます。
「お騒がせしました」
0045デフォルトの名無しさんNGNG
>>43
ここはプログラム技術板なので、プログラム技術についてカキコ
してね。板の雰囲気はすぐに変化する微妙なものだから。誰かと
誰かの人間関係に興味がある人はいません。

0046AΩ@北米海外板NGNG
でも、せっかくですから
Call by reference とCall by value の説明をしただいていただけると
大変感謝します。
1はしてくれなかったものですから。
0047AΩ@北米海外板NGNG
>45
申し訳ありません。
これにて私は失礼します。
0048デフォルトの名無しさんNGNG
全くこのすれと関係ないんだけど、ゲームプログラムのいたってない?
なかったら作っていい?
0049デフォルトの名無しさんNGNG
初心者には、そこそこ簡単にプログラムを楽しめる
BASIC、Perlとかで始めると
プログラムの文法みたいな事が覚えられるから
良いと思う。

プログラム文法的な部分(分岐、ループとか)を
覚えるならJavaはわかりにくいと思う。

オブジェクト指向の方が良いプログラムで良いソフトか?って言うと
そうでもないでしょ?

となると、Javaから覚える必要性は、それ程無いのでは?
メモリの活用法覚えるならCの方が良いと思うし。
0050デフォルトの名無しさんNGNG
BASICと言えば、PS2でBASICでましたね。

http://eg.nttpub.co.jp/news/20010124_03.html

初心者には良かろう。
0051デフォルトの名無しさんNGNG
>>50
どひゃー行番号だー。のすたるじー!買おっと。
0052デフォルトの名無しさんNGNG
ベーシックでプログラミング・・・
厨房が買いそうだな。
まぁ実際は2Dシューティングが関の山だろうがな。
例え3Dゲームとを作れるソフトと動かす環境はあっても厨房にはつくれん。
それはそうと「ネットやろうぜ」(だっけ?)のPS2版ってないの?
それ欲しいんだけど・・・
0053デフォルトの名無しさんNGNG
ゲームだったらHSPも単純だからとっつきやすいみたいだよ。
俺はやったことないんだけど良質なゲームもちらほらあるから
関連サイト見てみるといいかもね。

Perl は正規表現使わないならまあそれなりにとっつきやすいかも。
便利なモジュールもあるし。
でもこれでゲーム作るとなるとOSごとに覚えることが出てくるしそっちのが面倒かも。
CGIでやるってんならそれはそれでいい。
005453NGNG
>>48 ゲームについての板はあったと思う。
こっちのゲームはDirectXメインだったはず。
Winのゲームスレはプログラム板のほうだったかもしれない。
あとは過去ログあさっててはどうかね。
0055デフォルトの名無しさんNGNG
>>46
call by value
オブジェクトの値が渡されること。
call by reference
オブジェクトの参照が渡されること。

ということではないのか?
他にどう説明したら良いんだ?
0056デフォルトの名無しさんNGNG
実例出した方が早いね。

int func1(int b); // call by value
int func2(int *b); // call by reference
int func3(int &b); // call by reference

用は関数に渡した引数の値が関数の外に出た時に
値を変えられるかどうか。
#わかりにくい?
0057デフォルトの名無しさんNGNG
>>56
ポインタを渡すのを、参照渡しの例として出すのは、良くないんじゃないか?
0058デフォルトの名無しさんNGNG
>>56
>int func2(int *b); // call by reference
こりゃcall by valueダロ。
0059デフォルトの名無しさんNGNG
>>56
>用は関数に渡した引数の値が関数の外に出た時に
>値を変えられるかどうか。
つーか、この結論も間違ってるだろ。そんなこと、
Call by ValueとCall by Referenceとは本質的な
関係はないぞ。
0060AΩ@北米海外板NGNG
ありがとうございます。
私が当時に説明していたのが、間違っていなくて安心しました。
皆さんの大人な対応に大変感謝いたします。
0061デフォルトの名無しさんNGNG
int func1(int b); // call by value@` 値がコピーされる。
int func2(int *b); // call by value@` アドレスがポイントされる。
int func3(int &b); // call by reference@` アドレスを直接参照する。

間違ってますか?
0062デフォルトの名無しさんNGNG
ポインタ渡しは正確には参照渡しではないけど、
C言語の中では、実質的に参照渡しのようなものとして使用されているよ。
006356NGNG
57>ポインタを渡すのを、参照渡しの例として出すのは、良くないんじゃないか?
そうも思ったんだけど、ポインタは紛れも無くcall by referenceなので。。
58>こりゃcall by valueダロ。
・・・
59>そんなこと、Call by ValueとCall by Referenceとは本質的な関係はないぞ。
本質を説明して下さい。(まぁ、本質というか哲学的な話になると思いますが。。)
実質的には56の説明で事足りる話です。
006456NGNG
58様。本当に申し訳ないです。ポインタはcall by referenceではないです。
K&Rを見て調べました。本当にすまんです。。
006556NGNG
ポインタの引数渡しだと結局関数内ではポインタのコピーを作るってことですね。。
ごめんなさい。アヤマッテンダロ
0066デフォルトの名無しさんNGNG
問題:ポインタ初級編
void func1(int b){ b = 3; }
void func2(int *b){ b = 3; }
void func3(int *b){ *b = 3; }
void func4(int &b){ b = 3; }
int main(void){
 int a = 1;
 func1(a);  // A
 func2(a);  // B
 func2(&a); // C
 func3(a);  // D
 func3(&a); // E
 func4(a);  // F
}
この中でmain::aが3になるのは[A-F]どれでしょう?
また、処理が未定義の呼び出し[A-F]はどれでしょう?
0067デフォルトの名無しさんNGNG
なんだか、混乱してきてるの〜
call by referenceって
アドレス渡して
ポインタで受けることじゃないの?
0068デフォルトの名無しさんNGNG
違う。
0069デフォルトの名無しさんNGNG
いや、ちがうよ…
「参照」を渡せばなんでも call by reference なんであって、
べつに変数名の文字列を渡しても call by reference だ。
まあ広義の「ポインタ」だな (C の意味じゃなくて)。
あるデータを送るのにそのものを直接送るか、web にアップロードして URL を送るか、という違いだな。
0070デフォルトの名無しさんNGNG
Cの話をしてるんだろ。int f(char *s); は call by reference
なのか?
0071デフォルトの名無しさんNGNG
ここの板ってもうちょっとレベルが高いかと思ったけど
勘違いしてんの多いんだな。56はわかったようだけど。
0072デフォルトの名無しさんNGNG
>勘違いしてんの多いんだな
別に多くはないだろ。
0073デフォルトの名無しさんNGNG
>>70
だからさあ、実質的にはそのようなものとして使用されているって。
0074デフォルトの名無しさんNGNG
で、それを call by reference と呼ぶわけ? > 73
0075デフォルトの名無しさんNGNG
だから呼ばないけど、
あまり意味のある突っ込みとは言えないって事を言いたいわけよ。
0076デフォルトの名無しさんNGNG
定義書かないでやるから変にだらだら続くんだろ。

参照渡しは束縛を渡す。∴calledはcallerのスコープにある束縛を変更すること*も*できる。
値渡しは値を渡す。∴calledはcallerのスコープにある束縛を変更することはできない。

Cには言語仕様として参照渡しはないので、変数へのポインタを渡すことで
参照渡しの代用にすることがある。
ゆえに、int func2(int *b);は、
シンタックス上はcall by referenceではない。
セマンティクス上はcall by referenceとみなすことがある。
C++でも慣習として使う人が結構いる。

こんなところでどうかね。
0077デフォルトの名無しさんNGNG
>>76
異議無し
0078いつでもどこでも名無しさんNGNG
>>76 束縛を渡すって意味が分からない...
それに callerに対しては calleeだよ。

でも変数名を渡すのは call by textだとおもうけどねえ。
変数ができた環境まで一緒に渡せば call by nameかな。
Algolの本を読もう(藁
0079デフォルトの名無しさんNGNG
calleeって書こうと思ったけど意味わかんない人いると思って止めた。
余計な心配だったかな? スマソ
0080デフォルトの名無しさんNGNG
束縛ってなんの訳?
0081おっNGNG
なんか有意義な終わり方が見えてきたな。
0082デフォルトの名無しさんNGNG
>>80
binding
0083デフォルトの名無しさんNGNG
>76
「束縛」の意味の使われ方が変だ。
0084デフォルトの名無しさんNGNG
こう言うのって日本語に訳すと意味わかんなくなるよな。
0085デフォルトの名無しさんNGNG
素朴な疑問
ポインタの話は決着したようだが
これを読んで、ソースの組かた変わる人(ここに参加した人)がいるだろうか?
いなかったらただの自己満足では?
0086デフォルトの名無しさんNGNG
Cはともかく、C++で&使わないで*使うのってどう思う?

foo(int*);にしないと、呼び出し側の字面で
渡した値が変更されるかどうかわからない、っていう意見がある。
これには一理あると思うんだけど、個人的にはそれよりも、配列が欲しいんだか
もっとグローバルな感じのポインタ(アドレスって感じの)が欲しいんだか
参照渡しを意図してるのかわかんなくて困る、ってことの方が大きいような気がするんだが。

関数作った人の意図がわかりづらい、っていうか。
0087デフォルトの名無しさんNGNG
>86
ソースの組み方が変わるか変わらないかは置いておいて、
違いと特徴を理解することで、この3パターンにそれぞれ
どういうアドバンテージとディスアドバンテージがあって、
どういう状況でそれぞれの方法を使うのがいいのかを認識
することはできると思う。
0088デフォルトの名無しさんNGNG
すまん、87の>86じゃなくって>85ね。
0089デフォルトの名無しさんNGNG
オレはほとんど & にいいことはないと思っている。
メリットより混乱のほうが大きい。とくに、他人が読む場合。
0090デフォルトの名無しさんNGNG
>foo(int*);にしないと、呼び出し側の字面で
>渡した値が変更されるかどうかわからない、っていう意見がある。

0.5理ていどはあるが、せいぜいそこまでだあね。
PASCAL屋がそれで困ったって話は聞かないもんね。

009158NGNG
>>85
>ポインタの話は決着したようだが
>これを読んで、ソースの組かた変わる人(ここに参加した人)がいるだろうか?
>いなかったらただの自己満足では?
ほっといたら、56が正しいって思う奴が出て来るだろ?
56を読んで、それ以降の議論を読んでない奴もいるだろうし。
俺は、この件に関しては、重隅だとは思わん。
0092デフォルトの名無しさんNGNG
>メリットより混乱のほうが大きい。とくに、他人が読む場合。

>foo(int*);にしないと、呼び出し側の字面で
>渡した値が変更されるかどうかわからない、っていう意見がある。
関数宣言見ろ!
配列を渡されたら字面ではわからない。
0093デフォルトの名無しさんNGNG
>91

56の書きこみが正しいと勘違いした奴。それがAΩ(藁

まとめておこう。

「さるでもわかる:値呼び出しvs参照呼出しvs値呼び出し(ポインタ編)」

1:値呼び出し
値呼び出しの場合は変数のコピーを関数に渡しているわけだから、
関数内での変数の変更が直接元の変数に影響が出ることがなく安全。
ただその反面、関数に変数のコピーを渡すわけだから、でかい
データを渡そうとする場合は処理速度にひびく。

2.参照呼出し
参照呼出しの場合は関数内で直接もとの変数を変更することができる
ので、でかいデータをいじる時でも効率がいい。ただし、その反面
このことは安全性の点で混乱を招く可能性が非常に高い。

3.値呼び出し(ポインタ編)
ポインタはその点値呼び出しと参照呼出しのアドバンテージを両方兼ね
備えているような存在。値呼び出しだけど役割的には参照呼出しを
シミュレートしてるので、変数を「直接」変更しない安全性と性能の面
が利点。ただ、値呼び出しと参照呼出しの場合と比べて(特にプログラマ
初心者なんかには)直感的に理解しにくい。
0094デフォルトの名無しさんNGNG
>>93 異議あり
> 変数を「直接」変更しない安全性と性能の面が利点。
安全性(変数の変更が何処まで影響を及ぼすか)については
値呼び出し > 参照呼び出し > ポインタ じゃないか?

参照呼び出しの場合、呼び出し側と呼び出し元しか影響を及ぼさないが、
ポインタの場合、ポインタ演算を併用すると全域に影響を及ぼせる

009593NGNG
>94

そうつっこみを予想して「直接」という言葉を敢えて
使ったんだけどな。結果的にはいじることになるん
だけどさ。
0096デフォルトの名無しさんNGNG
ポインタと参照呼び出しは実装としては同じ。よって安全性はほとんど同じ。
たとえば参照呼び出しをさらに参照呼び出ししていくならば、ポインタ渡しと全く同じ。
参照呼び出しとポインタで異なるのは、ポインタはNULLが渡せる。
参照呼び出しはかならず変数の実体(オブジェクト)が必要になる。
0097デフォルトの名無しさんNGNG
っていうか、みんな「const」使ってないの?
void Hoge(const string& str);
これなら値は変更されないなって分かるじゃない。
009893NGNG
これポインタの利点に追加

>ポインタはNULLが渡せる。

安全性うんぬんを削除。あとは参照変数は一度
定義したら他の変数で実質上再定義しきれないけど、
ポインタならそれが可能ってところか。
0099デフォルトの名無しさんNGNG
>>96
>参照呼び出しとポインタで異なるのは、ポインタはNULLが渡せる。
追加、参照渡しはポインタ演算ができない。

また、参照渡し、ポインタ両方ともconst修飾により、
オブジェクトの変更を禁止させる事ことができ、
値渡しと同等の安全性を得る事ができる。
0100デフォルトの名無しさんNGNG
&だと、Null(無効値ね)を渡せない。ので、Nullを渡したいことのある関数では*を使う。
0101デフォルトの名無しさんNGNG
>>97
俺はよく使ってるぞ。これならパフォーマンスもいい。
誰も使ってないとしたらわりと疑問だな。

ついでに、必要もないのに非constポインタを要求するAPI逝ってよし。
0102>97NGNG
そうじゃなくて「それを呼び出す側のソースを見ただけでは」の話をしてたんだよ。
関数宣言を見るならば&がついてる時点で書き換えの可能性は考慮するでしょ。
0103デフォルトの名無しさんNGNG
>>102
my_strcpy(a@`b);
結局関数宣言を見ないとわからん。
それとも
my_strcpy(&a[0]@`b);
わざわざこうしてるのか?
0104デフォルトの名無しさんNGNG
ポインタには演算ができてしまうから参照と同じってことはないだろ。>安全性
0105デフォルトの名無しさんNGNG
>>101
>ついでに、必要もないのに非constポインタを要求するAPI逝ってよし。

激しく同意。MS最悪。

>>102
>そうじゃなくて「それを呼び出す側のソースを見ただけでは」の話をしてたんだよ。

呼び出し側のソース見ただけじゃ分からないのは当たり前だ。
ナニイッチャッテンノ?
0106デフォルトの名無しさんNGNG
>>102
ちょっと背伸びしちゃったね。
もっとガンバロウね!
0107デフォルトの名無しさんNGNG
はぁ? >>86あたりをよく読んでね。
自分よりできが悪そうなの一生懸命探してたたくのって楽しい?
0108106>107NGNG
タノシイノ
0109デフォルトの名無しさんNGNG
なんだ、そうなのか‥
だったらもう少しよく読まないと
かえって自分が恥じ書くよ
0110>103NGNG
aがポインタであることは呼び出し側ソースに
書いてると思うのだが‥
0111デフォルトの名無しさんNGNG
&は、オーバーロードの時、
値渡しとインターフェースが一緒です。
011285NGNG
>>91
いやー、思ったとおりの展開になってしまったよ
56を引き合いに出されるとなんとも言いにくい部分があるんだが
Cの言語仕様はそれでいいんだが、
93みたく勘違いしている連中のいるところで
言い合ってても無駄だなーと思ったわけです

それに、コンパイラとおった時点で実行速度とかの議論はできないんで
93の2でいわれているような場合にも最適化によって
差がでない場合もあるわけで
(C言語仕様のシンタックスの話よりも)そこらへんの話を含めた話で無いと
ポインタ談義の意味が無いと思ったわけです
0113デフォルトの名無しさんNGNG
>>112 何がいいたいの?
> 93みたく勘違いしている
何処が間違っている?例を挙げてくれ

> 言い合ってても無駄だなーと思ったわけです
無駄なら今ごろのこのこしゃしゃり出てんじゃねーよ。

こういう奴ってウザイ、失せろ!

0114デフォルトの名無しさんNGNG
ポインタ談義ではなく、
参照渡しと値渡しの話なんだが…
0115デフォルトの名無しさんNGNG
ポインタはcall by valueとcall by referenceの合いの子ってことで。
ポインタでボインダ
0116デフォルトの名無しさんNGNG
>113
まあ、んなことくらいでキレなさんな。大人げない‥

Cでのポインタ渡しは「call by value」
しかし、ポインタという性質を使うと
「call by reference」的な操作が実現できる
ってとこでしょ。アイノコってのはちょっと強引かと。
0117デフォルトの名無しさんNGNG
結論:
ポインタ渡しは「call by value」である。
これが納得できない奴は厨房である。
0118デフォルトの名無しさんNGNG
ポインタだとconst宣言しても変数の変更が可能な気がする・・・

アドレスが固定されるだけでそのアドレスがさす値は変えられる
・・・ってのは誤解ですか??
0119118NGNG
ごめんなさい勘違いでした・・・逝って来ます
0120デフォルトの名無しさんNGNG


   
0121デフォルトの名無しさんNGNG
これだけ意見がまとまらないということは
言葉など知らなくても問題無い、ということですか?
0122デフォルトの名無しさんNGNG
>121

君はあほですか?
0123デフォルトの名無しさんNGNG
>>118
自己解決したみたいだけど、一応。
constの位置によって意味が変わるのです。
0124まとめNGNG
void func(int* a);
において、
a(ポインタ自身)からみればcall by value
*a(ポインタにさされるもの)からみればcall by reference
0125デフォルトの名無しさんNGNG
call by name なつかしいねえ。
あれってインプリはなんだったのかね?
あとLispだとDynamic ScopeでShallow Bindingなんてするよね。

詳細は comp.lang.c Answers to Frequently AskedQuestions (FAQ List)
あたりを参照のこと。
Lispの例もあるし、Forthその他で 「参照渡し」というセマンティクスは
参照と束縛についての規範であり、実装時にポインタを使うかどうかは
別の問題。C++だと f( &i ); と f( *i ) を即座に同じコードに展開する
コンパイラが殆んどだが、違う束縛方法で実装したコンパイラを
禁止していない。
■ このスレッドは過去ログ倉庫に格納されています