トップページ⇒tech
1001コメント275KB

C言語なら俺に聞け(入門編)Part 108

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/09/30(日) 17:53:36.53
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 107
http://toro.2ch.net/test/read.cgi/tech/1347156509/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 159代目
http://toro.2ch.net/test/read.cgi/tech/1342966104/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★◆QZaw55cn4cは発言禁止です。トリップを隠してもダメです。
0153デフォルトの名無しさん2012/10/04(木) 22:18:58.05
intは基本型って書いてあるけど?
参照型でもあるの?

>>152
君馬鹿にハイハイって合わせるために
そうだねーとか、言ってる人でしょ?

マジレス希望なんで.....
0154デフォルトの名無しさん2012/10/04(木) 22:21:57.41
intは基本型であって、自動変数の場合にスタックを参照するが、
参照型とは言わないし、他の変数の参照にはならない。
0155デフォルトの名無しさん2012/10/04(木) 22:22:44.93
ソース上でxというラベルで参照できなきゃ何で参照するのかと

参照できたらなんでも参照型なのかと
0156デフォルトの名無しさん2012/10/04(木) 22:23:53.45
自動変数にラベルなんか貼らねえよぼけ
main() { int x; }
shit() { int x; }
これだけで破綻するコンパイラがあったら PC をビルごと爆破しろ
0157デフォルトの名無しさん2012/10/04(木) 22:24:16.82
参照型渡したら参照渡しって言い出す人達ってきっと……
0158デフォルトの名無しさん2012/10/04(木) 22:28:48.06
C言語では表にスタックも参照型も出てこない。
0159デフォルトの名無しさん2012/10/04(木) 22:30:10.98
先生、参照渡しとアドレスの値渡しの違いがわかりません
0160デフォルトの名無しさん2012/10/04(木) 22:34:40.47
引数として渡された値(アドレスだったらアドレスそのもの、アドレスの参照先ではなく)を
書き換えたら呼び出し元に反映されるのが参照渡し、
書き換えても呼び出し元に反映されないのが値渡し。

C言語には値渡ししかない。
0161デフォルトの名無しさん2012/10/04(木) 22:35:06.34
浮動小数点数の仕様がIEEE754の環境での浮動小数点数のデータ
それ以外の仕様、たとえばIBM方式での環境での浮動小数点数のデータ
これらをファイルで読み書きしたりデータ通信する際に
両者の間で相互に表現できない数値は存在するのか
もしあるのならその数値の扱いをどうするべきか

0162デフォルトの名無しさん2012/10/04(木) 22:35:24.62
>>155
すごい説得力...
確かにそうですよね
1+1=2だって
=があって成り立つ式ですもんね
0163デフォルトの名無しさん2012/10/04(木) 22:38:02.32
>>162
成り立たねえよアフォ
0164デフォルトの名無しさん2012/10/04(木) 22:40:12.96
>>160
いやポインタは参照渡しでしょ

例えばint *a; int *b;

*a=30

b=&a;

とかは?


0165デフォルトの名無しさん2012/10/04(木) 22:42:01.91
http://ja.wikipedia.org/wiki/%E5%BC%95%E6%95%B0#.E3.83.9D.E3.82.A4.E3.83.B3.E3.82.BF.E6.B8.A1.E3.81.97
0166デフォルトの名無しさん2012/10/04(木) 22:44:11.37
http://wisdom.sakura.ne.jp/programming/cs/cs20.html
0167デフォルトの名無しさん2012/10/04(木) 22:44:38.38
>>164
おまえさ、不定・・ いやコメントする気さえ失せた
0168デフォルトの名無しさん2012/10/04(木) 22:44:40.60
>>164
それは、ポインタの逆参照に代入している。
参照渡しとは言わない。

そもそもXX渡しって関数に引数与えることでしょ。
0169デフォルトの名無しさん2012/10/04(木) 22:45:43.53
>>168
言っている意味が分からない..
0170デフォルトの名無しさん2012/10/04(木) 22:46:41.14
>>167
不定なんですか?
0171デフォルトの名無しさん2012/10/04(木) 22:50:01.46
初期化されてないint *aは……
0172デフォルトの名無しさん2012/10/04(木) 22:51:13.83
参照渡し
実値渡し
逆参照渡し
アドレス渡し


複雑で結構難しいね
1日では理解できないや
0173デフォルトの名無しさん2012/10/04(木) 22:52:09.60
foo(int &a) { a = 1; }

int a = 5;
foo(a);
0174デフォルトの名無しさん2012/10/04(木) 22:52:17.82
>>170
不定かどうかさえわからない、
何というかこう、無ですらない超越した何かなんだよ

それを通すコンパイラは身近に実在してそうだけど、
頼むからツァーリボンバを都内で使ったりしないでくれ
0175デフォルトの名無しさん2012/10/04(木) 22:52:50.41
Cじゃないがこういうのが参照わたし
0176デフォルトの名無しさん2012/10/04(木) 22:54:11.28
int *a; int *b; a, bには有効なポインタが入ってない
*a=30; どこに30が格納されたのかわからない(メモリ破壊、一般保護例外の可能性)
b=&a; &aの型はint**。bはint*だから型が違う
0177デフォルトの名無しさん2012/10/04(木) 22:56:15.35
wikiにはポインタは値渡しってなってる...
もう死にたい
0178デフォルトの名無しさん2012/10/04(木) 22:58:23.25
参照渡し(さんしょうわたし、call by reference)はその実装手段の一つで、変数に対する参照(アドレス情報)を渡す方法である。
by wiki

つまりポインタ渡しと参照渡しは一緒ってことか
0179デフォルトの名無しさん2012/10/04(木) 22:59:25.26
bar(int *p) { p++; }

int a[2];
int *p = a;
bar(p); /* p == &a[0] のままであり p = &a[1] にはならない */
0180デフォルトの名無しさん2012/10/04(木) 22:59:35.33
>>177
イ�`
0181デフォルトの名無しさん2012/10/04(木) 23:00:47.48
>ポインタ渡しと参照渡し
両方あるc++はどうなるんだ
0182デフォルトの名無しさん2012/10/04(木) 23:02:16.25
>>181
両方あるから両方できる。
0183デフォルトの名無しさん2012/10/04(木) 23:02:30.09
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320144958

ここに分かりやすく載ってた(・〇・)ノ

うーん
ネットは情報量少なすぎるなぁ....
0184デフォルトの名無しさん2012/10/04(木) 23:03:14.45
ポインタと参照を混同したくなる気持ちはよくわかるが
C++、特に C++11 を真面目にやるやつには絶対お奨めしねえ
スレッドあたりで出てくる左辺値変形しない関数あたりで発狂した鬼気を楽しみに待ってるぜ
0185デフォルトの名無しさん2012/10/04(木) 23:04:11.33
矢切の渡し
0186デフォルトの名無しさん2012/10/04(木) 23:04:17.38
>>182
ポインタを参照渡しした時の解釈は如何に
0187デフォルトの名無しさん2012/10/04(木) 23:05:17.53
>>186
そのまま、ポインタを参照渡ししただけ。
0188デフォルトの名無しさん2012/10/04(木) 23:07:19.19
>>184
混同も何も一緒でしょ
0189デフォルトの名無しさん2012/10/04(木) 23:21:20.12
>>186
最近qzがやってたよ。あんまりわかりやすいとはいえないなあ。
0190デフォルトの名無しさん2012/10/04(木) 23:22:47.30
参照渡しでは、参照引数を使って実引数の値も変える事ができる。
 ↑
え?ポインタでも同じことできるじゃん。

int a=3;

int *b;

b=&a;

*b=4;


printf("%f\n",a);


出力
]a.out
]4

できるじゃん。
0191デフォルトの名無しさん2012/10/04(木) 23:33:13.25
できるから何なの?
0192デフォルトの名無しさん2012/10/04(木) 23:34:34.71
>>190
で?
0193デフォルトの名無しさん2012/10/04(木) 23:35:55.63
ポインタと参照の違いを熱く語っておきながら結局ポインタの
説明しかしてない奴
0194デフォルトの名無しさん2012/10/04(木) 23:37:07.50
参照渡しでなきゃできないことは
コピー、ムーブ、operator など、
どれも C++ で拡張された機能だからな

C の範疇で違いを示せというのは
アンフェアな要求だ
0195デフォルトの名無しさん2012/10/04(木) 23:48:55.71
誰かそんな要求したの?
0196デフォルトの名無しさん2012/10/04(木) 23:54:40.53
http://wisdom.sakura.ne.jp/programming/cpp/cpp11.html


ポインタ・・アドレス
参照・・指し示すが、変数そのもの、参照の値更新→変数値更新
0197デフォルトの名無しさん2012/10/04(木) 23:54:41.25
神が
0198デフォルトの名無しさん2012/10/05(金) 00:21:41.83
>>194
値私のたんびに裏でコンストラクタやデストラクタが走るのはどーもね
いや、インスタンスごとに固有の情報を持つ場合はしかたないけどね。
0199デフォルトの名無しさん2012/10/05(金) 00:25:38.14
へえ
0200デフォルトの名無しさん2012/10/05(金) 00:28:27.20
ポインタの参照渡しの話題なんだから、ポインタの値渡しでなく、ポインタを参照渡しすることで
出来ることを言わないと
まあ結局、ポインタが参照する先に対して出来ることは一緒なわけだけど
0201デフォルトの名無しさん2012/10/05(金) 00:40:29.14
>>200
データ構造のハンドリングで、
struct xxx **root;
func(&((*root)->left), ...
とかがでてくると、こりゃ参照のほうがいいかな?と
0202デフォルトの名無しさん2012/10/05(金) 00:49:09.45
アドレスの載ったアドレス扱うアセンブラ出力と
アドレスの先の直値を仔猫ねするアセンブラ出力では実行効率が全然違うじゃん
0203デフォルトの名無しさん2012/10/05(金) 00:53:04.25
参照はポインタの糖衣構文だよ
アドレスの正当性に対する責任を、呼び出し側に期待しているだけ
つまり、参照の場合、実体の存在を暗黙に要求してるわけね
0204デフォルトの名無しさん2012/10/05(金) 00:58:53.45
>>202
そう言う実装もあるかもしれないけど、一般的なコンパイラでは、参照はアドレス渡しの間接参照らしいよ
確かD&Eに書いてあった
ま、今となっては古い文献だけどね

だからプリミティブ型のconst参照は、百害あって一利無しらしい
(少なくとも当時は)
0205デフォルトの名無しさん2012/10/05(金) 01:06:35.41
でも参照返しはちょっとなじめないな、これはどういう糖衣構文?
0206デフォルトの名無しさん2012/10/05(金) 01:17:51.54
>>205
同じだよ
ポインタの糖衣構文
実体の存在を中で暗黙に保証しているだけ
ポインタで返すと、必ずヌルポが頭によぎるだろ?
0207デフォルトの名無しさん2012/10/05(金) 01:18:57.42
#defineマクロの糖衣構文に決まってんジャン
0208デフォルトの名無しさん2012/10/05(金) 01:23:24.68
javaが気が遠くなる程難しい
ttp://www.tec-q.com/note/2007/04/_java_23.html



Stringだとオブジェクト渡して操作しても値変わらず
Vectorならオブジェクト渡して操作したら値変わる


俺にはCがお似合いだわ
世の中の言語すべてCでいいお
0209デフォルトの名無しさん2012/10/05(金) 01:24:31.75
韓国の公衆トイレで“これ”を見た外国人が仰天(1)

一部海外ネットユーザーの間で、韓国式トイレが話題になっている。
「韓国の人たちはトイレットペーパーを便器ではなくゴミ箱に捨てます」。

2008年10月、ユーチューブに「コリアントイレットペーパー」(Korean toilet paper)と題した映像が登場した。
便器のそばの青いプラスチックのゴミ箱が置かれた韓国の公衆トイレ。カメラがゴミ箱の中のトイレットペーパーを
映し出し、「冗談じゃない」という撮影者の説明が続く。あるカナダのネットユーザーが載せたこの映像は現在、再生
回数9万3000回を記録中だ。

先月25日には米国のネットユーザーもブログにこういうコメントを載せた。
「韓国人は蓋のないごみ箱に汚物が付いたトイレットペーパーを捨てる。本当に気持ち悪い」。

一部海外ネットユーザーの間で、韓国式トイレが話題になっている。歌手PSYの曲「江南(カンナム)スタイル」に
例えて、「コリアントイレットスタイル」(Korean toilet style)という言葉も生まれた。
海外ブログには「韓国ではトイレットペーパーを便器に捨ててはいけない」など数百件の関連コメントが書き込まれている。

トイレにゴミ箱を置くのは韓国独特の文化だ。中国と一部の南米の国を除いて、便器の横にゴミ箱を置く国はほとんどない。
トイレットペーパーは便器に捨て、女性トイレにのみ女性用品などを捨てる小さなゴミ箱を置くのが一般的だ。
化粧室文化市民連帯のピョ・へリョン代表は「使用したトイレットペーパーを露出させておけば美観上よくないうえ、
細菌が繁殖したり、においがする」と述べた。

韓国式トイレ文化は、新聞紙や質が悪いちり紙を使用した際、便器が詰まるのを防ぐためにゴミ箱を置いたことから
始まったと推定される。しかし専門家はトイレットペーパーのために便器が詰まることはないという。

http://japanese.joins.com/upload/images/2012/10/20121004104950-1.jpg
http://japanese.joins.com/article/654/160654.html

http://www.youtube.com/watch?v=rQAsZaDYJs0
0210デフォルトの名無しさん2012/10/05(金) 01:24:44.57
世の中には === を使う言語もあるらしいぞ
0211デフォルトの名無しさん2012/10/05(金) 01:26:39.25
プログラミングはパズルじゃなくて概念の世界だな
お手上げ
0212デフォルトの名無しさん2012/10/05(金) 01:27:42.33
>>206
糖衣構文と言うことは、ポインタを使って別の表現で全く同じ動作を書けるということだよね。
書いてみて。
0213デフォルトの名無しさん2012/10/05(金) 01:50:28.92
ふっひっ
0214デフォルトの名無しさん2012/10/05(金) 01:55:18.10
すべての構文はアセンブラで説明できます。
0215デフォルトの名無しさん2012/10/05(金) 01:58:17.64
それでは説明して下さい。
0216デフォルトの名無しさん2012/10/05(金) 02:27:28.65
>>212
できるよ
問題を提示してみてよ
変換してあげるから
0217デフォルトの名無しさん2012/10/05(金) 02:34:04.43
【問題1】
>>205に記載の「参照返し」の例を示し、それと同じ動作をとなる処理をポインタを使って記述せよ。
その中で「参照返し」がポインタの糖衣構文であることを示すこと。(10点)
0218デフォルトの名無しさん2012/10/05(金) 02:45:25.36
>>217
#include <stdio.h>

int *getRef(void) {
static int a = 1;
return &a;
}

int main(void) {
int *a = getRef();
printf("%d\n", *a);
return 0;
}
0219デフォルトの名無しさん2012/10/05(金) 05:52:14.93
>>161
文字列に変換してからファイルに記録するのがベター。
必然的に、精度や値域については仕様として決定しておくことが望ましい。
0220 ◆QZaw55cn4c 2012/10/05(金) 06:22:09.21
>>208
つmutable
java.lang.String は何か変更を加えるとオブジェクトの参照そのものが変わるんだ毎回realloc()していると思ってよい有名な振る舞い
http://ideone.com/5aiQ5
0221デフォルトの名無しさん2012/10/05(金) 06:28:58.24
>>218
0点

・「参照返し」の例がどの部分であるのか説明すること
・同じ動作をとなる処理をポインタを使って記述した部分がどの部分であるか説明すること
・その中で「参照返し」がポインタの糖衣構文であることを示すこと
0222デフォルトの名無しさん2012/10/05(金) 06:40:41.96
>>221
うぜ、なにこいつ
0223デフォルトの名無しさん2012/10/05(金) 06:51:55.38
ほっふっ
0224デフォルトの名無しさん2012/10/05(金) 06:53:41.71
>>217 >>221
http://codepad.org/HDbv0kgV
0225デフォルトの名無しさん2012/10/05(金) 08:20:40.16
>>208
ごめんね immutable で初期化しかできない、代入等の変更は駄目、という意味ね
>>220 の mutable は間違いねでも、そのほかはだいたいあってると思う、えーと、ideone は stringbuffer を使えば想定どおりになるよ、という意味ね

なんだか我ながらよくわかってないみたいだけれども、ここ java スレじゃないし許してね。
0226デフォルトの名無しさん2012/10/05(金) 13:10:07.21
ポインタは ヌルポや実態を伴っていない不定値も含む
参照は 実態を伴っている

渡された側 や 戻り値として受ける側 で考慮しておくべき範囲が違う

必ず実態を伴うポインタと縛られていることが前後の文意や仕様で確定した条件下
に限定すれば、変わらない
0227デフォルトの名無しさん2012/10/05(金) 15:53:28.79
int main()
{
  int* a = 0;
  int& b = *a;

  return 0;
}

参照だとこんなのが可能なので、実体があることは保証されない。
0228デフォルトの名無しさん2012/10/05(金) 15:57:00.02
>>226
ガッ
0229デフォルトの名無しさん2012/10/05(金) 16:32:32.06
例外示すのにポインタ使ったらダメじゃね?
0230デフォルトの名無しさん2012/10/05(金) 16:55:11.25
nullptr
ヌルヌルのポインタ
0231デフォルトの名無しさん2012/10/05(金) 20:24:01.59
char* str = "abc\ndef";
のstrを引数にしてある関数に渡した後、
printf("%s\n", str);
するとdefと表示されるようにしたい
ある関数を実装せよ
0232デフォルトの名無しさん2012/10/05(金) 20:35:43.22
>>231
何で命令してんの馬鹿じゃねえかお前
0233デフォルトの名無しさん2012/10/05(金) 20:39:43.72
>>231
ドアノブでも自殺出来るらしいぞ
0234デフォルトの名無しさん2012/10/05(金) 20:46:19.60
>>232
はあ?何様だお前
ネタをくれてやってるんだろうがさっさと回答よこせボケ
身の程をわきまわろブタやろう
0235デフォルトの名無しさん2012/10/05(金) 20:47:44.18
ttp://ideone.com/BivKM
0236デフォルトの名無しさん2012/10/05(金) 20:48:02.43
return "def" ;
0237デフォルトの名無しさん2012/10/05(金) 20:52:36.38
memmoveの前にp++するの忘れてたわ
0238デフォルトの名無しさん2012/10/05(金) 20:54:51.91
>>234
何で命令口調なんだよ、植毛して出直してこいよハゲ
0239デフォルトの名無しさん2012/10/05(金) 20:55:59.56
>>236
あの必死さだと前払いの一点張りで20万くらいぼれそうだなw
0240デフォルトの名無しさん2012/10/05(金) 20:58:26.01
ttp://ideone.com/zhRu0
0241デフォルトの名無しさん2012/10/05(金) 20:59:58.21
>>237
できましたありがとうございました
0242デフォルトの名無しさん2012/10/05(金) 21:43:13.09
いえいえ
0243デフォルトの名無しさん2012/10/05(金) 21:53:57.01
ハッシュ値から文字列に直すのはどうしたらいいですかね?

文字列abcをハッシュ関数f(x)で198に変換する。

f(x) : コート値を足す。
0244デフォルトの名無しさん2012/10/05(金) 21:56:50.37
>>243
基本無理
ハッシュは可逆変換ではないので
0245デフォルトの名無しさん2012/10/05(金) 22:04:24.20
>>244
ありがとうございます
0246デフォルトの名無しさん2012/10/05(金) 22:08:02.59
いえいえ
0247デフォルトの名無しさん2012/10/05(金) 22:20:11.21
そうでわありませぬ
0248デフォルトの名無しさん2012/10/05(金) 22:21:01.72
さうですか
0249デフォルトの名無しさん2012/10/06(土) 00:45:28.65
>>224
結局、「参照返し」がポインタの糖衣構文であることは示さないんだな。

もういいけど。
0250デフォルトの名無しさん2012/10/06(土) 03:43:44.86
参照は、C++だろ
0251デフォルトの名無しさん2012/10/06(土) 04:12:15.71
>>249
C++の規格票に参照返しがポインタの糖衣構文であるとはどこにも書いてないわけだが
0252デフォルトの名無しさん2012/10/06(土) 07:45:17.06
◆日本に必要な法案 1位に「韓国人の入国滞在禁止法」

民主党・自民党の党首選が終わり、新党首による初の論戦の場となる臨時国会の召集日が
いつになるのか注目が集まっており、その臨時国会で、野田首相は赤字国債発行に
不可欠な特例公債法案の成立を目指しているという。

一方、ネットでも様々な法案が議論されており、投票サイト『センタク』では
「日本に必要な法案」の投票が行われている。

同サイトで行われている「日本に必要な法案」の投票は2012年08月12日から
2012年11月09日 まで行われているものであり、
2012年10月4日17時21分現在の総投票数は636票。

現在、「韓国人と朝鮮人の日本入国滞在禁止法」が27.4%(174票)で1位となっており、
2位の「暴力団親族政治活動禁止法」(16.2%)を10ポイント以上引き離す結果に。
3位以下には「生活保護の不正受給防止法」(13.2%)、「スパイ防止法を内包した軍事法」
(12.1%)、「民営賭博(パチンコ)禁止法」(8.5%)が続いている。

少数意見としては、「表現規制を禁止する法律」(0.9%)、「公共放送(NHK)廃止法」(0.3%)、
「日本全国民にID番号制度」(0.3%)、「バラエティ番組規制法」(0.2%)などにも
投票が寄せられている。

また1位の「韓国人と朝鮮人の日本入国滞在禁止法」に投票した人たちからは
「あいつらと関わると不幸になるだけ」「沢山あるが先ずはコレ」などのコメントが
寄せられている。

アメーバニュース 2012年10月04日16時24分
http://yukan-news.ameba.jp/20121004-252/
■ このスレッドは過去ログ倉庫に格納されています