C言語なら俺に聞け 141 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/07/17(月) 21:06:47.63ID:J4JGo3XO
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


http://mevius.2ch.net/test/read.cgi/tech/1494508803/
http://www.geocities.jp/c_cpp_cs/about_c/
2017/08/07(月) 00:43:09.37ID:CdxYgk48
ポインタ渡されww
2017/08/07(月) 00:46:39.34ID:r7C/NYo5
じゃあ「アドレス渡し」ならいいわけ?
2017/08/07(月) 00:48:53.93ID:tmW9+jq1
定義至上主義者とは一般的な会話が成り立たないことがよくわかる
2017/08/07(月) 00:51:00.39ID:r7C/NYo5
定義至上主義なら最初から「アドレス渡しと呼べ」と言えばいいだけだから、ただ文句つけたかっただけだと思うよ
2017/08/07(月) 01:02:22.98ID:L++MnVlz
定義至上主義者はID:r7C/NYo5のことだと思うが
「ポインタ渡し」だの「アドレス渡し」だの言葉の定義に拘ってるようにしか見えん
2017/08/07(月) 01:04:50.56ID:uOfJK7yi
>>694
厳密にはNULLポインタとかがアドレスじゃないから、「ポインタ型の値」といったほうが汎用的では
そして、
>>685
によると(場合によってはポインタ型の値)もポインタと言ってる箇所があるのかな
仕様書読むのめんどくさい

どれにせよ、厳密な表記しても初心者には得がないな
2017/08/07(月) 01:06:41.28ID:Uo4tfgNR
>>693
printfに対する知識がなければ、アドレスを渡しているところまでしかわからない
2017/08/07(月) 01:08:08.23ID:tmW9+jq1
この流れでそう思える読解力は凄い
言葉の定義で頓珍漢な噛みつき方したのは
ID:Uo4tfgNRとID:YE/9ro9hだろ
2017/08/07(月) 01:10:17.31ID:r7C/NYo5
>>701
そんなことで人のことをガイジガイジ連呼していたの?
2017/08/07(月) 01:11:58.49ID:ITzYZ/9b
人工知能は人間らしい解釈ができないから仕方ない。
2017/08/07(月) 01:14:42.90ID:tmW9+jq1
これチューリングテストの実験場だったのか
見抜けなかったわ〜w
2017/08/07(月) 01:15:35.04ID:DdwwpY1/
だからさぁ。使い道を聞かれてんだよ、使い方じゃねーんだよ。さっさと答えてやれよ。

javaやpascalはポインタ使わなくてもプログラム書けるのにCにポインタが必要になる使い方をよ。

もしかしておまえら入門書読んで理解したつもりなだけで、ポインタが何か分ってないんだろ?
2017/08/07(月) 01:18:08.93ID:r7C/NYo5
>>706
俺はガイジ連呼厨の意図が知りたかっただけだし、そこまで偉そうに言うなら君が答えてあげなよ
2017/08/07(月) 01:19:37.44ID:Uo4tfgNR
>>703
お前をガイジと呼んだのは、書かれていない単語が見えてたからだと説明したはずだが
2017/08/07(月) 01:21:33.94ID:ITzYZ/9b
そこ、放送禁止用語も知らない一般人、オンエアしちゃダメ。
2017/08/07(月) 01:26:39.77ID:r7C/NYo5
>>708
俺以外に対してだよ
2017/08/07(月) 01:35:13.99ID:DdwwpY1/
結局、javaやpascalはポインタ使わなくてもプログラム書けるのに
Cにポインタが必要になる使い道、理由は誰も分らないのかよ。

ガッカリだぜ。なにがC言語なら俺に聞けだよ。
2017/08/07(月) 01:35:26.77ID:ITzYZ/9b
┌────────┐
│        │
│  /■~\   │
│  (´∀`∩)  │
│  (つ  丿  │
│  ( ヽノ   │
│  し(_)   │
│        │
│Now Onigiring...│
│        │
│ 暫くおにぎりで │
│ お待ちください │
└────────┘
2017/08/07(月) 01:38:45.36ID:ITzYZ/9b
http://pg-kura.hatenablog.com/entry/20120616/1339856279
2017/08/07(月) 01:41:43.94ID:Uo4tfgNR
>>703
> printf("Hello, C world!\n"); これがポインタだっ どやっ
十分にガイジ

「ポインタ渡し」のガイジ事か?
> こいつらの反論が反論になっていないな
> C分かっていればそのコードが
> ポインタ渡しになっていることは直ぐに分かるんだけどね
printfの知識が無ければわからない
「渡され」を「渡し」と呼ぶ
十分にガイジ
2017/08/07(月) 01:44:12.93ID:ITzYZ/9b
生で全国放送なんで、影響力強いっす。学校でイジメの真似事されると困ります。ですから、放送コードに違反した発言は極力慎むように頼みます。
2017/08/07(月) 01:48:52.14ID:r7C/NYo5
>>714
最初のは確かに渡されだけどポインタじゃない?一応間違ってはないんじゃない? 最初にそのレスした時相手のprintfの知識とか考えてなかっただろうし。

それに「ポインタ渡し」は慣用語として定着してしまっている側面もあるからその用語を使っただけでガイジ認定は早いよ
ある程度の慣用語は意図を汲んだ上で、間違ってると思うなら的確に指摘しないとコミュニケーション成立しなくてどっちがガイジかわからなくなっちゃう
2017/08/07(月) 01:50:24.62ID:Amcgn4Bl
>>711
ポインタという仕組みを1つ導入することでアドレスを直接操作することができるからかな
参照だとアドレスを操作できない
他の言語はアドレスを逆に操作させないことで安全性を保つというスタンスだけど
C/C++は安全でない代わりにアドレスを直接操作する事ができるというスタンス

あとはメモリ操作のコスト削減があげられると思う
for(i = 0; i < MAX; i++){
dest[i] = src[i];
}
とやるよりも
src_p = src;
dest_p = dest;
dest_end_p = dest + MAX;
while (dest_p < dest_end_p) {
*dest_p++ = src_p++;
}
とやるほうがコストが軽い
2017/08/07(月) 01:50:56.10ID:ITzYZ/9b
動物園の檻の中で「あいつはオラウータン」「こいつはゴリラ」とかぼやいてる飼育員。
2017/08/07(月) 01:55:31.83ID:Amcgn4Bl
脱字訂正
誤:*dest_p++ = src_p++;
正:*dest_p++ = *src_p++;
2017/08/07(月) 02:04:29.54ID:Uo4tfgNR
>>716
やっぱり見えないものを見てるガイジか?
> printf("Hello, C world!\n");
これのどこに
> A pointer is a variable that contains the address of another variable.
が現れているんだ?

確実に配列とポインタの区別がついてないガイジだろ
2017/08/07(月) 02:11:29.62ID:r7C/NYo5
>>720
渡され側は先頭アドレスを格納したポインタであって、
そのレスをした人は最初にレスした時、相手のprintfの知識とか気にしてなかっただろうって書いたつもりだけど、なんか間違ってた?
2017/08/07(月) 02:12:45.69ID:ITzYZ/9b
引数は変数の一種と見なすのも一理あるだろう。仮引数も変数と見なしても実用上は問題ない。
それとも仮引数は変数ではないと言い張りたいのか?
2017/08/07(月) 02:16:49.89ID:ITzYZ/9b
我々は実用性を重視するが、理論上では仮引数はポインターではないかもしれない。君のような理論家ではそれは重要かもしれないが。
2017/08/07(月) 02:19:54.41ID:Uo4tfgNR
>>721
> printf("Hello, C world!\n");
この一文のどこにポインタが使われてるんだ?
printfの定義は「この一文」には含まれないよな
subroutine printf(s)
character*80 s
かもしれんぞ


591 デフォルトの名無しさん[] 2017/08/05(土) 05:11:53.62 ID:dUt+j3iS

>>584
printf("Hello, C world!\n");
この一文でもう既にポインタを使っているわけだが?
2017/08/07(月) 02:30:03.96ID:r7C/NYo5
>>724
とりあえず、もしfortranから呼んでるならなら_printfじゃない?
さっきから言われた側の知識に言及していらっしゃるけど、それこそ一般に言うとprintfって言ったら普通はstdio.hのものを指すし、言われた側もまさかfortranとは思わないよ
そんな病的な状況を例に出さないといけない時点でおかしい噛みつき方してるってわかるもんだと思うけどなあ
2017/08/07(月) 02:31:22.31ID:ITzYZ/9b
>>724
それはC言語以外の話になるだろう。
2017/08/07(月) 02:36:12.54ID:ITzYZ/9b
printfの仮引数がポインター型だから、printf内部とprintfの型情報でポインターを使っているといっても間違いではない。
2017/08/07(月) 02:41:35.68ID:ITzYZ/9b
頭でっかちの理論家が、間違いを含む古い書籍を読んで、一字一句正しいと思い込んでいるのは最悪な状況だ。
2017/08/07(月) 02:46:48.50ID:Uo4tfgNR
>>722
「この一文」と限定したんだから、それ以外の知識は不要で、これだけでポインタを使ってるという事だな
2017/08/07(月) 02:48:03.30ID:Uo4tfgNR
>>727
プロトタイプも「この一文」以外の知識だよ
ボンクラ
2017/08/07(月) 02:48:13.58ID:YE/9ro9h
同意
俺も>>694では単に概念を述べただけなのに何故だか定義至上主義にされてしまったからな
理論化にとっては定義が大事なだけであって概念を理解しようとしない
2017/08/07(月) 02:55:53.68ID:ITzYZ/9b
>>730
一文の意味論を考えると、やはりその仮引数はポインターだという結論になる。
2017/08/07(月) 02:59:45.50ID:ITzYZ/9b
そのうちprintfがマクロだとか言い出す
2017/08/07(月) 03:15:03.46ID:ITzYZ/9b
教育上は、引数は関数に渡せる変数だと指導する方が分かりやすい。ただ、コンパイラーや言語を考えるとき、理論上では問題がある。
2017/08/07(月) 03:21:11.00ID:ITzYZ/9b
実際、仮引数は、変数と同じように型を持ち、変数と同じように値を代入したり、値を取り出したりできる。
これを変数ではないとするのは直感に反する。だから教育上の配慮から、理論以外では、仮引数は変数だと見なしてよい。
2017/08/07(月) 03:22:46.64ID:Uo4tfgNR
>>732
どこに「この一文」に仮引数が出てきてるんだ
お前も見えないものが見えるガイジか?
2017/08/07(月) 03:23:44.68ID:ITzYZ/9b
>>736
私には意味が見える。
2017/08/07(月) 03:30:44.55ID:ITzYZ/9b
>>736
お前のそのコメントのどこに意味が見える? 意味は見るものじゃなくて解釈するものだ。
意味論上で意味を解釈しようとしない馬鹿に議論はできない。
2017/08/07(月) 03:40:03.33ID:ITzYZ/9b
猿、猿、猿。さて猿は何匹? いいえ、これはただの文字。本当の猿ではありません。
printf("あほ"); さて、これはどんな処理でしょう。いいえ、この文はただの
テキスト。フォートランかもしれないし、
バイナリーではないから、本当の処理ではありません。
printf? 別に意味なんてありません。この一文に意味なんてありません。
こいつらは形而上学を知らないのか。
2017/08/07(月) 03:48:46.08ID:ITzYZ/9b
形而上言語では、一文とその意味は同一視するものだ。
そこで君が提示したprintf("なんちゃら");も意味があると仮定する。
これはprintf関数に"なんちゃら"という文字列データのアドレスを渡すものと解釈される。
よってこのprintfの最初の仮引数はポインター型だ。もし、ポインター型でなければ、形而上の意味が不定になり、
君が提示したことはC言語的には無意味だ、
という意味になる。馬鹿げてるよ。
2017/08/07(月) 04:01:49.30ID:ITzYZ/9b
 ∧_∧      半端者はみっくみくにしてやんよ
 ( ・ω・)=つ≡つ
 (っ ≡つ=つ
 /   ) ババババ
 ( / ̄∪
2017/08/07(月) 04:23:54.04ID:Uo4tfgNR
>>740
printf("なんちゃら");
はprintfと言う外部名を持つ手続きに引数として文字配列の先頭アドレスを与えて呼び出すという意味しかない
わかったかね ボンクラ
2017/08/07(月) 04:32:31.96ID:5iW9wRlr
月曜の朝っぱらから元気だな
とレス辿ったら昨日からずっとやってたのか
2017/08/07(月) 04:34:25.12ID:ITzYZ/9b
>>742
敢えてprintfの型に触れず誤魔化してるようにしか見えないが。printfの型が決まってなければ、明らかにコンパイルできない文だ。
2017/08/07(月) 04:49:23.24ID:ITzYZ/9b
 ∧_∧      半端なヤツはみっくみくにしてやんよ
 ( ・ω・)=つ≡つ
 (っ ≡つ=つ
 /   ) ババババ
 ( / ̄∪
2017/08/07(月) 04:55:23.95ID:ITzYZ/9b
「戻り値」はダメとか言ったらキリがない。
言葉の世界は多数決で決まる。
時代錯誤な正義を振りかざすな。
2017/08/07(月) 05:16:25.45ID:ITzYZ/9b
const char a[1] = "";
const char *p = "";
assert(sizeof(a) == 1);
assert(sizeof(p) == sizeof(void *));
a++; // Error
p++; // OK
2017/08/07(月) 05:33:55.94ID:ITzYZ/9b
我が国は教育上の配慮を生徒よりも先回りして先回りして考えているから、教育水準をここまで
高めることが出来たんだ。教育上の配慮がないなら、答えを砂漠の中から探させることになってしまうぞ。
お前は天才だからいいが、エリートじゃない一般人は教育上の配慮を行った教材じゃないと生き残れない。
2017/08/07(月) 06:44:33.33ID:qWjEOBrh
>>744
コンパイルするのにprintfの型が既知である必要なんてないだろ
何言ってんだコイツ
2017/08/07(月) 06:52:48.38ID:bZKJxmgb
>>672
これどこの定義か知らんけど(変数じゃなくて)関数へのポインタって言うのもあるよね?
2017/08/07(月) 07:37:27.89ID:ITzYZ/9b
                  ┌─┐??
                  |も.|??
                  |う |??
                  │来│??
                  │ね│??
                  │え .|??
                  │よ .|??
       バカ    ゴルァ  │ !!.│??
                  └─┤    プンプン??
     ヽ(`Д´)ノ ヽ(`Д´)ノ  (`Д´)ノ    ( `Д)??
     | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U??
〜 〜  ̄◎ ̄  . ̄◎ ̄   ̄◎ ̄   ◎−>┘◎
752デフォルトの名無しさん
垢版 |
2017/08/07(月) 07:48:24.65ID:xW9C/CpC
>>735
仮引数ってプロトタイプ宣言の引数じゃなかったっけ?
あれ、関数の型を教えるだけだから、型だけ書いて変数書かないとかもおkだお。

int hoge(int);
2017/08/07(月) 08:38:13.41ID:oeQKd2lB
あいや〜
昔 -traditional でgccでコンパイルして
動かせた化石ソースが、
今はもう -traditional使えないんで
コンパイル出来ない、動かせないアルよ。
2017/08/07(月) 09:14:12.38ID:dOHD//zn
>>752
仮引数かいてなくて どっちがどっちじゃ! と迷う qsort
qsort(void*, size_t , size_t , int (*)(const void*,const void*)):
2017/08/07(月) 09:25:07.14ID:Uo4tfgNR
>>750
自分で調べて一次ソースを持ってこい
許容されるソースはK&RかISO/JIS/ANSIに準ずる規格票
2017/08/07(月) 09:27:48.56ID:Uo4tfgNR
>>754
仮引数もガイジ認定したい用語だ
原文ではparameter
実引数をあらわすargumentはactual argumentまたはactual parameterとも呼ばれる
実仮引数 w まさにガイジ用語
2017/08/07(月) 09:29:25.08ID:dOHD//zn
>>756
漢字にすると面倒な言葉だね・・・ たまに何だっけ?ってなることがある
2017/08/07(月) 09:30:00.41ID:r4dv7rmY
化石ソース

#include<stdio.h>

int function(a, b, c)
int a;
int b;
int c;
{
return a*b + c;
}

int main(void){
printf("%d\n", function(5, 4, 10));
return 0;
}
759デフォルトの名無しさん
垢版 |
2017/08/07(月) 09:30:57.72ID:xW9C/CpC
>>754
いあ。。。
実引数の方みろよとしか。。。
プロトタイプ宣言に何期待してんだよ。
2017/08/07(月) 09:35:47.75ID:dOHD//zn
数使ってるなら、そのうち覚えるけど、そうでもないのはいちいち調べるのに手間だし
最近のは プロトタイプをポップアップ表示したりする環境もあるし ね
2017/08/07(月) 10:58:51.07ID:oP4SeJHR
英語圏のガイジはどんな用語擬きの英語使うか気になる
2017/08/07(月) 12:44:52.49ID:bZKJxmgb
>>755
お前が調べて持ってこいよ w
2017/08/07(月) 14:01:38.84ID:Uo4tfgNR
>>744
ウソついてゴメンなさいはしないのか?
2017/08/07(月) 14:02:13.15ID:Uo4tfgNR
>>762
見つけられないなら、お前の戯言
2017/08/07(月) 14:21:07.21ID:Oq7cYNKv
JavaにポインタがなくてCにポインタがあるのはという話が出ているが
データのあるアドレスの扱いをポインタで実現したかそうでないかということだと思われる
Javaではint[]型のような参照型の変数にはアドレスが入っている
他例えばJavaScriptではNumber, Booleanのようなラッパークラスがint*などに似た役割を果たす
2017/08/07(月) 14:23:34.73ID:Oq7cYNKv
int*というよりはint *constか
2017/08/07(月) 14:27:21.13ID:Jd+yR0yr
char*ってなんなの?
char型の配列の先頭のアドレスを入れる配列って事?

つまりchar* a = {"hello","hoge","bread"};

こう?
2017/08/07(月) 14:36:26.52ID:Oq7cYNKv
charは256種類の値をとる型でありそれを使って'A'とか文字1つを表す
char型の配列はcharを一列に並べることによってUTF-8ヌル終端文字列を表す
その先頭のアドレスはchar*型なのでC言語ではchar*が文字列型になる
文字列の配列が欲しければ(char*)*つまりchar**
2017/08/07(月) 14:44:29.34ID:Cf79G+d9
>>768
char a と char* aは同じってこと?
char**は文字列の配列だから

さっきの例でchar** aならa[0]はhello, a[1]はhoge?
2017/08/07(月) 15:36:39.87ID:YE/9ro9h
http://codepad.org/O7uohbtZ
2017/08/07(月) 15:53:42.35ID:fj1hwtp7
>>770
うーん
char とchar*ってやっぱり違うのか?
charが配列でchar*は2次元配列みたいなものなのかな?
char**は3次元配列でchar***(以下略


char a[][] これは2次元配列
char *a[] これも2次元配列
char **a これも2次元配列
って事なのかな?
2017/08/07(月) 16:34:16.06ID:YE/9ro9h
http://codepad.org/zgPHa4lf
2017/08/07(月) 16:35:01.20ID:bZKJxmgb
>>764
はあ?
お前関数へのポインタも知らんのか? w
2017/08/07(月) 16:54:50.74ID:Uo4tfgNR
>>773
「(変数じゃなくて)関数へのポインタ」があると主張している、お前が一次ソースもってこい
775デフォルトの名無しさん
垢版 |
2017/08/07(月) 18:33:10.56ID:OgCRmlag
>>662
ポインタだよ
おまえまさか「配列を渡した」とか思ってるのか?
手帳がいるのおまえだろ、あ既にもってるんだっけw
2017/08/07(月) 18:56:35.36ID:DdwwpY1/
>>765
全然ポインタが何か分ってねぇ。cだって配列あるじゃねーか。
2017/08/07(月) 19:43:35.00ID:r7C/NYo5
>>774
横からだけどこれでいいか?
K&R第2版Chapter 5より
The use of comp in the line
if ((*comp)(v[i], v[left]) < 0)
is consistent with the declaration: comp is a pointer to a function, *comp is the function, and
(*comp)(v[i], v[left])
is the call to it.
2017/08/07(月) 19:53:25.65ID:g8RW1Chx
ポインタが変数ではない別の何かだと言うのは、始めて聞きました
2017/08/07(月) 19:56:00.52ID:r7C/NYo5
>>778
>>750のことなら(変数へのポインタではなく)関数へのポインタって意味だと思うよ
2017/08/07(月) 20:00:14.61ID:YE/9ro9h
関数のポインタの配列
http://codepad.org/GP2rFL5Z
781デフォルトの名無しさん
垢版 |
2017/08/07(月) 20:31:35.85ID:OgCRmlag
>>778
ポインタは、アドレスを意味する値であって
それを格納しうる変数には限らない
2017/08/07(月) 20:59:10.29ID:yPIvhEga
論点が何なのかさっぱりわからん
783デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:02:26.86ID:OgCRmlag
論点はポインタの使い途wwwwwwwww
2017/08/07(月) 21:04:00.81ID:DdwwpY1/
> ポインタは、アドレスを意味する値

酷いな。小学生かよ。
2017/08/07(月) 21:07:10.64ID:g8RW1Chx
ポインタが変数なのか変数でないのか、結論は出ましたか?
2017/08/07(月) 21:22:08.65ID:4hdYUdtg
>>778
理解力無さすぎだろ...
787デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:23:07.98ID:OgCRmlag
>>785
それは論議の結論ではなく、単なる事実

# 年齢だか学歴がどうたら言ってるアフォはスルー
2017/08/07(月) 21:24:03.98ID:0SF3W3/o
(void *)0 は何になるんで
2017/08/07(月) 21:26:45.04ID:yPIvhEga
議論をするなら自分の主張くらいはっきり書けよ
790デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:29:47.13ID:OgCRmlag
>>788
ポインタ
2017/08/07(月) 21:31:15.86ID:DdwwpY1/
一つ言えることは、幼稚園児 ID:OgCRmlag がオレオレ定義したポインタ

> ポインタは、アドレスを意味する値

を誰も支持することはないだろうということ。
2017/08/07(月) 21:33:48.90ID:DdwwpY1/
ID:OgCRmlag一人頓珍漢なこと言ってるだけあって、他は言ってること同じということか。
こいつ一人スルーすれば議論するようなことは何もない。
2017/08/07(月) 21:34:30.59ID:yPIvhEga
支持じゃなくて規格書を根拠としないと
794デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:39:11.76ID:OgCRmlag
>>793
そうだな、おまえが根拠を示す必要があるな
どこに pointer is an lvalue とあるのか頑張って探せや
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況