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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2012/09/30(日) 17:53:36.53 ]
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 107
toro.2ch.net/test/read.cgi/tech/1347156509/
★過去スレ
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代目
toro.2ch.net/test/read.cgi/tech/1342966104/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
codepad.org/
ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★◆QZaw55cn4cは発言禁止です。トリップを隠してもダメです。

101 名前:デフォルトの名無しさん mailto:sage [2012/10/02(火) 05:18:16.04 ]
いやテーブルなんて掛け算回路で使ってるし、分かってるよ
ただ四則演算を全部テーブル参照にするってとこが


102 名前:デフォルトの名無しさん mailto:sage [2012/10/02(火) 06:07:13.41 ]
>>100
こんな程度のLUTで速くなるとか思い込まないように

自己責任でコピして貼った
ideone.com/rG1D8

ちなみに手元: gcc 4.7.1 、-O3 -lm
SinCos_Table:100000
Time benchmark: cos(), Cos()
cos:0.50sec
Cos:0.81sec

環境にもよるってことで、LUTだから速いというのはその環境でという条件付きだよ

103 名前:デフォルトの名無しさん mailto:sage [2012/10/02(火) 07:24:34.34 ]
>>96
ゲーデル数化すれば理論的には一対一対応にできるが、
非現実的に巨大な、ランダムアクセスできるメモリが必要になる

104 名前:デフォルトの名無しさん mailto:sage [2012/10/02(火) 10:07:57.39 ]
>>102
テーブル使うのに浮動小数点と整数の変換挟むのは無いわ

105 名前:デフォルトの名無しさん mailto:sage [2012/10/02(火) 11:14:51.97 ]
配列の添字に浮動小数点でインデックスできると思ってるバカ発見、ではないよね?

106 名前:デフォルトの名無しさん mailto:sage [2012/10/02(火) 11:51:08.13 ]
intにキャストすればよい

107 名前:デフォルトの名無しさん mailto:sage [2012/10/02(火) 12:22:10.31 ]
割り算をROMに入れとくってのは、よくやってる。

108 名前:デフォルトの名無しさん mailto:sage [2012/10/02(火) 12:45:05.35 ]
割り算は遅いからな。

109 名前:デフォルトの名無しさん mailto:sage [2012/10/03(水) 06:48:57.15 ]
VCでプログラミングの勉強するときにファイル名をmain.cにしてるわけだが、
プロジェクト名をかな文字にしているせいでたまにまいん。cって打ってしまうことがある。
その度にまいんちゃんを思い出してしまうんだが何とかならないのだろうか?



110 名前:デフォルトの名無しさん mailto:sage [2012/10/03(水) 06:54:20.70 ]
>>109間違えた。

VCでプログラミングの勉強するときにファイル名をmain.cにしてるわけだが、
プロジェクト名をローマ字打ちの全角文字にしてるために、
英数字に戻すのを忘れてたまに”まいん。c”って打ってしまうことがある。
その度にまいんちゃんを思い出してしまうんだが何とかならないのだろうか?

111 名前:デフォルトの名無しさん mailto:sage [2012/10/03(水) 06:58:24.32 ]
WinXPだとそうなるバグ(仕様?)
Win7だとIMEが勝手にONになる事はない

112 名前:デフォルトの名無しさん mailto:sage [2012/10/03(水) 09:51:14.57 ]
まいんちゃんも成長しすぎてもう賞味期限切れだな

113 名前:デフォルトの名無しさん mailto:sage [2012/10/03(水) 21:29:36.37 ]
>>110
win+r > notepad > main.cを入力 > ctrl+a > 日本語入力に変更 > ctrl + f10 > w > まいん。cで登録
要するにIMEの単語登録しとけっていう話
IDE知らなかった時分はpfをprintf("とか常用関数の入力補完用として登録しまくってた思い出

114 名前:デフォルトの名無しさん [2012/10/03(水) 23:46:35.18 ]
int c;
char a[1];
char b[1];
a[0]='d'; b[0]='d';
c=strcmp(a,b);
printf("%d\n",c);


結果が0にならないのですがどうしてでしょう?
一致で0のはずですが.....

115 名前:デフォルトの名無しさん mailto:sage [2012/10/03(水) 23:59:57.24 ]
文字列の終端を意味する \0 が無いから

char a[2], b[2];
a[0] = 'd'; a[1] = '\0';
b[0] = 'd'; b[1] = '\0';

116 名前:デフォルトの名無しさん [2012/10/04(木) 00:04:27.59 ]
>>115
なるほど
\0は必要なんですね
ありがとう

117 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:11:41.89 ]
>>115
\0を代入せずとも
自動的に残りの要素が\0になっているようにするにはどうすればいいでしょう?
a[3];
a[0]='x'; a[1]='y';
としてもa[2]は不定値のままです。

118 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:12:32.23 ]
宣言時に0を入れとくしか

119 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:17:47.58 ]
calloc



120 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:18:36.19 ]
>>118
for()
{
a[i]=\0
}
ということですか?

121 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:21:19.16 ]
char a[2] = {0};

122 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:21:20.15 ]
>>118
strcpyの場合
0になりましたけどstrcpyは有効でしょうか?

strcpy(a,"str")
s (b,"");

strcmp0になりました。

123 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:22:03.14 ]
何時代入の終わりが来るか知りようが無いので
・初期化で全要素に対して 0 を埋める int a[3] = { 0 };   ( int a[3] = { }; はセーフだっけ?
・許されるのならば代入をやめ、初期化で全てを終わらせる int a[] = "xy";

124 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:25:36.23 ]
strcpyは\0までコピーする仕様になってる
strlenは\0までカウントしないんだよな
舐めやがって

125 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:27:42.25 ]
文字列 "str" は 4要素 { 's', 't', 'r', '\0' } 持ってます
strcpy は \0 を含めて複写します。
故に strcpy(a, "str") を行う場合 a は最低限 4個入る器が必要です

126 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:29:54.29 ]
char str = "abc";

char* p = malloc(strlen(str));
strcpy(p, abc); // <= メモリ破壊

舐めやがって

127 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:30:30.21 ]
strcpy(p, str);
だったは


128 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:30:30.92 ]
>>125
\0以降は不定でもstrcpyに影響はでないですかね?

129 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:31:33.23 ]
ライブラリの仕様を調べるのもプログラマの仕事だ



130 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:33:08.24 ]
>>128
文字列関数は \0 で打ち切るので、それ以降の事情はしったこっちゃないことになっています。
逆に言うと \0 が来ないと打ち切れないので、どうなるかは判りません

131 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 00:48:27.20 ]
#define BUFFER_SIZE 20
#include <stdio.h>
#include <string.h>
char c[BUFFER_SIZE];

int main(void)
{
  char d[BUFFER_SIZE];
  int i;

  for(i = 0; i < BUFFER_SIZE; i++) {
    printf("%d", c[i]);
  }

  putchar('\n');
  memset(d, 0, sizeof(d) );
  for(i = 0; i < BUFFER_SIZE; i++) {
    printf("%d", d[i]);
  }

  return 0;
}

132 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 09:06:45.68 ]
未初期化のスタック覗いたところで所詮環境依存だから意味ない
むしろ誤解を招くだけ

133 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 09:21:07.53 ]
>>132
ドンマイ

134 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 09:23:45.54 ]
>>133
理解できないなら引っ込んでなよ。

135 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 14:18:47.64 ]
未初期化のスタックは覗いてないような気がする

136 名前:デフォルトの名無しさん [2012/10/04(木) 15:08:57.23 ]
だよな

137 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 16:09:48.52 ]
だからドンマイって言ったのに・・・

気づかないとは思わなかった

138 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 16:27:25.83 ]
それはいいとしても>>131が何を示したかったのか分からない

139 名前: ◆QZaw55cn4c mailto:sage [2012/10/04(木) 18:44:55.90 ]
>>132
未初期化?どこに?どんとまいんど



140 名前:デフォルトの名無しさん [2012/10/04(木) 20:08:26.79 ]
Cで
int x;
x=124;
の場合

同じ大域領域の同じブースに"x"と"124"が格納されているわけ?


javaだと
参照値と実体は別だと聞きました。

141 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 20:12:20.09 ]
ブース?


142 名前:デフォルトの名無しさん [2012/10/04(木) 20:15:18.44 ]
>>141
メモリ上の区画という意味です

143 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 20:20:59.16 ]
へえ

144 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 20:42:11.50 ]
メモリ上の区画の事を
お前以外の全員は何て呼んでると思う?


145 名前:片山博文MZボット ◆0lBZNi.Q7evd [2012/10/04(木) 20:55:42.81 ]
>>140
"x"は格納されていません。

146 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 20:56:02.44 ]
ゴミ箱だっていう人もいるけど、俺は宝箱って呼んでる。

147 名前:デフォルトの名無しさん [2012/10/04(木) 20:59:33.32 ]
>>144
メモリーポジションブロック

148 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 21:11:07.85 ]
>>140
int x; /* 大域領域にintサイズの領域を確保し、xという名前で参照する事を宣言する。
x=124; /* 上で宣言された領域をintとして参照し、そこに124を格納する。 */


149 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 21:17:19.35 ]
>>140
Javaでも、プリミティブ型は、



150 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 21:23:11.81 ]
int x; // スタックを確保してxというラベルで参照する
x=124; // Define Double wordで用意した124をスタック上のxに転記する

151 名前:デフォルトの名無しさん [2012/10/04(木) 22:09:58.95 ]
>>150
xというラベルで参照する?

ということはC言語のint 変数;
は参照型変数?

152 名前:デフォルトの名無しさん [2012/10/04(木) 22:15:32.54 ]
うん

153 名前:デフォルトの名無しさん [2012/10/04(木) 22:18:58.05 ]
intは基本型って書いてあるけど?
参照型でもあるの?

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

マジレス希望なんで.....

154 名前:デフォルトの名無しさん [2012/10/04(木) 22:21:57.41 ]
intは基本型であって、自動変数の場合にスタックを参照するが、
参照型とは言わないし、他の変数の参照にはならない。

155 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 22:22:44.93 ]
ソース上でxというラベルで参照できなきゃ何で参照するのかと

参照できたらなんでも参照型なのかと

156 名前:デフォルトの名無しさん [2012/10/04(木) 22:23:53.45 ]
自動変数にラベルなんか貼らねえよぼけ
main() { int x; }
shit() { int x; }
これだけで破綻するコンパイラがあったら PC をビルごと爆破しろ

157 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 22:24:16.82 ]
参照型渡したら参照渡しって言い出す人達ってきっと……

158 名前:デフォルトの名無しさん [2012/10/04(木) 22:28:48.06 ]
C言語では表にスタックも参照型も出てこない。

159 名前:デフォルトの名無しさん [2012/10/04(木) 22:30:10.98 ]
先生、参照渡しとアドレスの値渡しの違いがわかりません



160 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 22:34:40.47 ]
引数として渡された値(アドレスだったらアドレスそのもの、アドレスの参照先ではなく)を
書き換えたら呼び出し元に反映されるのが参照渡し、
書き換えても呼び出し元に反映されないのが値渡し。

C言語には値渡ししかない。

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



162 名前:デフォルトの名無しさん [2012/10/04(木) 22:35:24.62 ]
>>155
すごい説得力...
確かにそうですよね
1+1=2だって
=があって成り立つ式ですもんね

163 名前:デフォルトの名無しさん [2012/10/04(木) 22:38:02.32 ]
>>162
成り立たねえよアフォ

164 名前:デフォルトの名無しさん [2012/10/04(木) 22:40:12.96 ]
>>160
いやポインタは参照渡しでしょ

例えばint *a; int *b;

*a=30

b=&a;

とかは?




165 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 22:42:01.91 ]
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

166 名前:デフォルトの名無しさん [2012/10/04(木) 22:44:11.37 ]
wisdom.sakura.ne.jp/programming/cs/cs20.html

167 名前:デフォルトの名無しさん [2012/10/04(木) 22:44:38.38 ]
>>164
おまえさ、不定・・ いやコメントする気さえ失せた

168 名前:デフォルトの名無しさん [2012/10/04(木) 22:44:40.60 ]
>>164
それは、ポインタの逆参照に代入している。
参照渡しとは言わない。

そもそもXX渡しって関数に引数与えることでしょ。

169 名前:デフォルトの名無しさん [2012/10/04(木) 22:45:43.53 ]
>>168
言っている意味が分からない..



170 名前:デフォルトの名無しさん [2012/10/04(木) 22:46:41.14 ]
>>167
不定なんですか?

171 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 22:50:01.46 ]
初期化されてないint *aは……

172 名前:デフォルトの名無しさん [2012/10/04(木) 22:51:13.83 ]
参照渡し
実値渡し
逆参照渡し
アドレス渡し


複雑で結構難しいね
1日では理解できないや

173 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 22:52:09.60 ]
foo(int &a) { a = 1; }

int a = 5;
foo(a);


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

それを通すコンパイラは身近に実在してそうだけど、
頼むからツァーリボンバを都内で使ったりしないでくれ

175 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 22:52:50.41 ]
Cじゃないがこういうのが参照わたし

176 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 22:54:11.28 ]
int *a; int *b; a, bには有効なポインタが入ってない
*a=30; どこに30が格納されたのかわからない(メモリ破壊、一般保護例外の可能性)
b=&a; &aの型はint**。bはint*だから型が違う

177 名前:デフォルトの名無しさん [2012/10/04(木) 22:56:15.35 ]
wikiにはポインタは値渡しってなってる...
もう死にたい

178 名前:デフォルトの名無しさん [2012/10/04(木) 22:58:23.25 ]
参照渡し(さんしょうわたし、call by reference)はその実装手段の一つで、変数に対する参照(アドレス情報)を渡す方法である。
by wiki

つまりポインタ渡しと参照渡しは一緒ってことか

179 名前:デフォルトの名無しさん mailto:sage [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] にはならない */



180 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 22:59:35.33 ]
>>177
イ`

181 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 23:00:47.48 ]
>ポインタ渡しと参照渡し
両方あるc++はどうなるんだ

182 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 23:02:16.25 ]
>>181
両方あるから両方できる。

183 名前:デフォルトの名無しさん [2012/10/04(木) 23:02:30.09 ]
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320144958

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

うーん
ネットは情報量少なすぎるなぁ....


184 名前:デフォルトの名無しさん [2012/10/04(木) 23:03:14.45 ]
ポインタと参照を混同したくなる気持ちはよくわかるが
C++、特に C++11 を真面目にやるやつには絶対お奨めしねえ
スレッドあたりで出てくる左辺値変形しない関数あたりで発狂した鬼気を楽しみに待ってるぜ

185 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 23:04:11.33 ]
矢切の渡し

186 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 23:04:17.38 ]
>>182
ポインタを参照渡しした時の解釈は如何に

187 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 23:05:17.53 ]
>>186
そのまま、ポインタを参照渡ししただけ。

188 名前:デフォルトの名無しさん [2012/10/04(木) 23:07:19.19 ]
>>184
混同も何も一緒でしょ

189 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 23:21:20.12 ]
>>186
最近qzがやってたよ。あんまりわかりやすいとはいえないなあ。



190 名前:デフォルトの名無しさん [2012/10/04(木) 23:22:47.30 ]
参照渡しでは、参照引数を使って実引数の値も変える事ができる。
 ↑
え?ポインタでも同じことできるじゃん。

int a=3;

int *b;

b=&a;

*b=4;


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


出力
]a.out
]4

できるじゃん。

191 名前:デフォルトの名無しさん [2012/10/04(木) 23:33:13.25 ]
できるから何なの?

192 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 23:34:34.71 ]
>>190
で?

193 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 23:35:55.63 ]
ポインタと参照の違いを熱く語っておきながら結局ポインタの
説明しかしてない奴

194 名前:デフォルトの名無しさん [2012/10/04(木) 23:37:07.50 ]
参照渡しでなきゃできないことは
コピー、ムーブ、operator など、
どれも C++ で拡張された機能だからな

C の範疇で違いを示せというのは
アンフェアな要求だ

195 名前:デフォルトの名無しさん [2012/10/04(木) 23:48:55.71 ]
誰かそんな要求したの?

196 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 23:54:40.53 ]
wisdom.sakura.ne.jp/programming/cpp/cpp11.html


ポインタ・・アドレス
参照・・指し示すが、変数そのもの、参照の値更新→変数値更新

197 名前:デフォルトの名無しさん mailto:sage [2012/10/04(木) 23:54:41.25 ]
神が

198 名前:デフォルトの名無しさん mailto:sage [2012/10/05(金) 00:21:41.83 ]
>>194
値私のたんびに裏でコンストラクタやデストラクタが走るのはどーもね
いや、インスタンスごとに固有の情報を持つ場合はしかたないけどね。

199 名前:デフォルトの名無しさん mailto:sage [2012/10/05(金) 00:25:38.14 ]
へえ



200 名前:デフォルトの名無しさん mailto:sage [2012/10/05(金) 00:28:27.20 ]
ポインタの参照渡しの話題なんだから、ポインタの値渡しでなく、ポインタを参照渡しすることで
出来ることを言わないと
まあ結局、ポインタが参照する先に対して出来ることは一緒なわけだけど






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

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

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