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/05(土) 02:13:08.60ID:ZBBOV18T
ポインタの演算コストって普通の整数演算と違うの?
2017/08/05(土) 02:22:37.47ID:AmDvMFkm
ポインタに+1したら1増えるのかよ?デバッガで値見てみ。
591デフォルトの名無しさん
垢版 |
2017/08/05(土) 05:11:53.62ID:dUt+j3iS
>>584
printf("Hello, C world!\n");
この一文でもう既にポインタを使っているわけだが?
2017/08/05(土) 05:22:24.07ID:6vPjJVmL
使ってるから何?
2017/08/05(土) 05:53:46.66ID:AmDvMFkm
ポインタの使い道を答えたら逆ギレするガチ初心者。
おそらくポインタを勘違いしてるからキレてんだろうな。
2017/08/05(土) 09:33:54.76ID:FQO/+BoZ
>590
char *で実験する様子が(ry
2017/08/05(土) 09:44:09.47ID:B4rhQgJR
>>591
初心者にありがちな間違い
ポインタと配列は区別しよう

関数に配列を渡した時の解釈について言及しているなら、ガチの初心者に対しては不適切
596デフォルトの名無しさん
垢版 |
2017/08/05(土) 09:59:39.56ID:dUt+j3iS
>>595
おまえも仮引数と実引数を区別しろ
597デフォルトの名無しさん
垢版 |
2017/08/05(土) 10:02:18.44ID:xVRX2iSI
void * に1を足す記述がエラーも警告も無しでコンパイル通ってしかも何事もなく1足されてたのを発見した時は驚いた。
gccってそういう仕様だったんだね。
2017/08/05(土) 11:10:13.55ID:gO/VMD2L
仮引数
実引数

何用語?
2017/08/05(土) 11:13:38.50ID:hIPGEPA7
いくらなんでも流石にそれぐらいは自分で調べて欲しいレベル
2017/08/05(土) 11:15:51.54ID:B4rhQgJR
>>598
Cの規格にはない用語だな
きっと別の言語なんだろう

文字列リテラルがポインタ wな謎言語
2017/08/05(土) 11:24:58.14ID:tl2KBfJf
仮引数と実引数はC用語じゃねえの?
2017/08/05(土) 11:32:07.13ID:jiOahgu4
仮引数と実引数はJIS X3010にも定義されている用語
仮引数はparameter、実引数はargument
ただ>>596が何を言いたいのかはよく分からん

要するに仮引数はプロトタイプ宣言などで仮に与える引数(型さえ明確なら何でもいい)のことで
実引数は式の中で実際に使われる引数(関数で実際に利用するので名前は重要)のこと
2017/08/05(土) 11:34:21.17ID:hIPGEPA7
>>600
アセンブラのオペランドにイミディエイト出来ないものはRO領域に格納されるのでアドレスが割り振られポインタ管理できる

>>601
言語固有の用語ではなく構造化プログラミングの用語
2017/08/05(土) 11:35:58.99ID:B4rhQgJR
ああ、argumentとparameterをJISはそう訳してるのか
それはすまん
2017/08/05(土) 11:37:18.40ID:B4rhQgJR
>>603
ぷぷぷ
必死だな 配列とポインタが違うって事 知ってるかい? w
2017/08/05(土) 11:40:54.82ID:B4rhQgJR
なんか、昔はポインタと配列の区別を知らない筆者の書いた入門書で障害児が量産されたと聞いたが
その中の一人かな
2017/08/05(土) 11:41:33.20ID:hIPGEPA7
知っていますよ
2017/08/05(土) 11:50:23.17ID:B4rhQgJR
>>607
> アセンブラのオペランドにイミディエイト出来ないものはRO領域に格納されるのでアドレスが割り振られポインタ管理できる
知っているとは思えない発言なんだが
2017/08/05(土) 11:54:45.67ID:AmDvMFkm
RO領域って何?
2017/08/05(土) 11:59:40.46ID:hIPGEPA7
>>608

>文字列リテラルがポインタ wな謎言語

なぜ文字列リテラルがポインタだと謎な言語なのでしょうか?
また>>608のその文のどの辺りが間違っていますか?

後学までにご指摘頂けるとありがたいです。
2017/08/05(土) 12:03:38.04ID:hIPGEPA7
>>609
ReadOnly領域です
まぁ割り当て方はリンカ次第ですが
2017/08/05(土) 12:32:48.74ID:B4rhQgJR
>>610
文字列リテラル即ち配列
配列とポインタは異なるもの
∴ それを同じとするのは謎言語

> 後学までにご指摘頂けるとありがたいです。
ROなんて決まってねーし
即値で表現できない(struct foo){1,2,3}なんてのはアドレス欲しかったら&で取らなきゃいけねーし

何もかにもがデタラメ
2017/08/05(土) 12:38:11.97ID:GxOZ02Sj
なんかニワカ臭
2017/08/05(土) 12:38:15.34ID:AmDvMFkm
処理系も指定せず意味不明杉。どっかで頓珍漢な呼出規約の説明してた人と同一人物じゃないのか。
2017/08/05(土) 13:12:31.66ID:hIPGEPA7
>>612
>それを同じとするのは謎言語
Cの文字列はcharの配列
それはリテラルでも変わりませんよ?
それ自体が謎というならもうCは無理でしょう

>ROなんて決まってねーし
特殊なリンカでない限り大抵のリンカは定数はROに配置しますよ?

>即値で表現できない(struct foo){1,2,3}なんてのはアドレス欲しかったら&で取らなきゃいけねーし
即値とリテラルが区別出来ていないのでは?
リテラルだろうとメモリ上に配置されたものはアドレスが振られています

>何もかにもがデタラメ
私には貴方がなにも知らないようにしか見えません
2017/08/05(土) 13:19:25.82ID:LM2wNYVN
>>615
>特殊なリンカでない限り大抵のリンカは定数はROに配置しますよ?
組込みか何か?
2017/08/05(土) 13:20:36.17ID:239At3Tg
604 デフォルトの名無しさん[sage] 2017/08/05(土) 11:35:58.99 ID:B4rhQgJR

ああ、argumentとparameterをJISはそう訳してるのか
それはすまん


だっさ最低限の日本語も知らずに日本の2chに書き込むなよ
2017/08/05(土) 13:21:53.41ID:hIPGEPA7
>>616
今は組み込み屋ですね
昔はアプリ屋でWinやAndroid触ってました
2017/08/05(土) 13:26:16.29ID:3YqA5kDS
もしかして配列とポインタの区別すらついてないのか
2017/08/05(土) 15:28:27.35ID:AkDeKfTH
Cだと実際区別ないよね
長々と罵りあってるのに具体的な説明がひとつも出てなくてわろた
2017/08/05(土) 15:41:07.75ID:B4rhQgJR
>>615
こいつダメだ 何もかもがデタラメ
ポインタと配列の区別
リテラルと即値の区別

何も出来てない
2017/08/05(土) 15:43:44.88ID:B4rhQgJR
>>620
無知を自慢しなくても良いから
2017/08/05(土) 16:11:57.11ID:uXlFBIBD
シンタックスシュガーですよ。
2017/08/05(土) 16:14:56.43ID:40G0sflG
6809 のアドレッシングモードが懐かしい
リテラルと即値の区別は 6809 を触っておればわかるよね
6809 搭載のPCIボードを誰か作ってくれないかな
2017/08/05(土) 17:47:19.45ID:dV9p14Wx
char *pointer;
char array[1];

・・・・・・
pointer++; /* OK */
array++; /* error */
2017/08/05(土) 17:51:18.49ID:xVRX2iSI
>>620
こういうのあるよね。

char s1[] = "a";
char *s2 = "b";

これ、s2には後から他の文字列を指すポインタの代入ができるがs1にはできない。
s2はポインタを入れる変数に対する名前になっているがs1は文字列定数の先頭を
指すラベルにしかなっていない。

それとこんなのもある。

char s3[3][100];
char *s4[3];

s4は3要素のchar*だが、s3は違う。char で 100 要素の配列が3要素ある。
配列の配列なので実は typedef char c100t[100]; c100t s3[3]; みたいに書いたのと同じだ。
新しい型が密かに作られている。なので違うのだがアクセスする時に s3[x][y] も s4[x][y] も
できたりして見た目が同じになる。
多分初心者はこれにハマることがあると思う。特に関数の引数をs3のように書いてしまい、
それでs4を引き渡そうとした時とか、あるいはその逆の時とかね。(そして昔のコンパイラは
警告も出さずに通ってしまい動かしてからバグに悩むと)。
2017/08/05(土) 18:08:09.16ID:PFeVLmXg
cで一番難しいのは、constだと思う。
間違えてても、動いちゃうからなー
なくても困らないけれど、厳密に宣言しようとおもうと慣れが必要。

char ** とか
2017/08/05(土) 18:10:24.82ID:PFeVLmXg
あっ、あと二次元配列とかは、関数の引数に指定しようとするとはまるね。
2017/08/05(土) 19:34:33.25ID:vX9Ad9Pg
"constは左に掛かる"

char const **s; // charを修飾
char * const *s; // char *を修飾
char ** const s; // char **を修飾

と書けば何も迷うことはない
2017/08/05(土) 19:38:19.13ID:vHyXltX+
では const char **s は?
2017/08/05(土) 19:39:51.34ID:vX9Ad9Pg
>>630
char const **s;
と一緒
2017/08/06(日) 00:10:43.00ID:+MX/dj54
>>630
「では」 がconst
2017/08/06(日) 00:11:43.92ID:ljqAECQw
forkで子プロセスを複数生成した際に、子プロセス間で変数を共有、または子プロセスから他の子プロセス(親は同一)の変数にアクセスする方法って有りませんか?

共有メモリ以外でお願いします
2017/08/06(日) 00:18:14.02ID:+MX/dj54
ファイル経由
2017/08/06(日) 00:42:21.39ID:LLgtDDDS
pipe
2017/08/06(日) 07:47:08.77ID:D2MwPYUj
大喜利をやれということなのかな
2017/08/06(日) 07:49:51.80ID:UjkuucW3
ptrace
638デフォルトの名無しさん
垢版 |
2017/08/06(日) 10:57:12.05ID:3gNA0Uyl
>>633
内部的には共有メモリと同じなんだろうけどmmapなんかどうだ?
639633
垢版 |
2017/08/06(日) 12:30:30.67ID:QIgcqg1l
すみません自決しました
2017/08/06(日) 13:28:03.88ID:fp1GLRR7
書き込めると言うことは自決は失敗か
2017/08/06(日) 14:15:03.73ID:fAxfwMN0
自動で書き込むスクリプト作ったんじゃろ
2017/08/06(日) 14:32:55.81ID:/dqOVGNE
多倍長演算って10000進法でやってる?
それとも2^n進法?
2017/08/06(日) 14:33:22.10ID:nazawjTw
>>633
> 共有メモリ以外でお願いします
共有メモリがダメな理由が書いてないからネタなんだろうな
2017/08/06(日) 14:36:56.91ID:nazawjTw
>>642
32bit マシンでも 2^32 進数なんて使ってないが...
645デフォルトの名無しさん
垢版 |
2017/08/06(日) 15:27:01.03ID:3gNA0Uyl
>>643
難しくてわからないからじゃね?
あるいは宿題がそういう風に出てしまった。
2017/08/06(日) 15:42:53.54ID:LLgtDDDS
UNIX SOCKET
2017/08/06(日) 15:58:13.64ID:pnlX0fdh
>>645
どっちにしてもスルーするのが正解
648633
垢版 |
2017/08/06(日) 16:02:38.93ID:qTrjZ2YT
>>643
コードが無駄に長くなるので好きじゃないんです
どうしてもって時以外は使いたくないです
649デフォルトの名無しさん
垢版 |
2017/08/06(日) 16:31:30.70ID:ThMEkv3I
>>602
596だが
おまえ、どこから流れ読んでる?
>>593あたり前後の関係よく見てみな
>>595がいかに頓珍漢な噛みつき方しているか牛でもわかるぞ
2017/08/06(日) 16:47:17.37ID:r2XWWSNC
>>649
ポインタと配列の区別がつけられない障害児のID:dUt+j3iSか
出会った入門書が悪かったんだから、もう諦めてポインタのない言語を学びなおせ

お前にゃCは無理って事だ
2017/08/06(日) 16:48:57.70ID:r2XWWSNC
ポインタを教えてくださいと言ってる初心者に配列使って見せて
「これがポインタだっ どやっ」

笑うしかないな
2017/08/06(日) 16:52:58.17ID:4cVoKrwP
やっぱりポインタの勉強するには柴田ぼーよー先生のポインタの本がいいんでしょうか?
2017/08/06(日) 16:56:06.63ID:r2XWWSNC
ID:dUt+j3iSにどんな本使ったか聞いて、それは避けるべきだと思うよ
2017/08/06(日) 17:02:15.95ID:jhhg/GBw
こいつらの反論が反論になっていないな
C分かっていればそのコードが
ポインタ渡しになっていることは直ぐに分かるんだけどね
まぁスルーが得策だよ
ID:dUt+j3iSはID:r2XWWSNCに構ってはいけない
2017/08/06(日) 17:23:37.54ID:OSHq4q+H
問題はそこではなくて、ポインタの話からいきなり仮引数だの実引数だのとかの話に飛躍したことだと思うのだがな
まあだいたい想像は出来る
何故だか初心者本でよく見られる間違いとして、関数の呼び出し側の引数が実引数、関数の受け取り側の引数が仮引数、という説明をそのまま受け入れていたのだろうな
言語によってはその通りかも知れんが、少なくともC言語のJIS X 3010の解釈とは異なっている
2017/08/06(日) 17:28:55.73ID:r2XWWSNC
>>654
ID:jhhg/GBwもポインタ理解出来てない障害児か
初学時になんて本使った?
657デフォルトの名無しさん
垢版 |
2017/08/06(日) 17:35:06.21ID:ThMEkv3I
>>654
ご忠告どうも
気持ちだけありがたく貰っとくyo

>>656
K&R 1stだが何か?
2017/08/06(日) 17:37:29.70ID:MVEPApHK
C言語でもその解釈で全然問題無いと思うけどな俺は
どっちにしてもID:r2XWWSNCはど素人のくせに
質問の仕方も知らない無礼な奴と言う事には間違いはないだろう
2017/08/06(日) 17:44:53.62ID:OSHq4q+H
>>657
実引数として配列を用いて関数呼び出しを行えば、呼び出された関数は仮引数としてポインタで受け取ると言いたいのだろう
K&Rでも実引数と仮引数はそういった説明をしていたか?
2017/08/06(日) 17:54:58.87ID:r2XWWSNC
>>657
おメーには聞いてねーよ 障害児
661デフォルトの名無しさん
垢版 |
2017/08/06(日) 18:16:39.32ID:ThMEkv3I
>>659
ああしていたよ
おまえには読み取れなかったんだろうがな

>>660
無礼なやつだな
俺は障がい者手帳は交付されてねえよ
勝手に妄想すんな精神分裂病患者め
2017/08/06(日) 19:45:26.91ID:r2XWWSNC
>>661
> printf("Hello, C world!\n"); これがポインタだっ どやっ
手帳申請しろよ w
2017/08/06(日) 19:52:07.02ID:OFkcQ32C
>>662
>>661 にそんなことは書かれているのか?
2017/08/06(日) 19:55:39.33ID:zQpO4a2U
そういやシンタックスシュガーと言えば、昔々こんなのが動いたのを初めて見た時は驚いたな。
https://paiza.io/projects/XOWJRDaMZQIIu9cF5Ex1Ug
本当にポインタ計算してるだけという。
2017/08/06(日) 20:53:33.24ID:r2XWWSNC
>>659
ガイジには読み取れなかったようだ
> When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;

良い時代になったもんだ 歴史的資料がきちんと公開されている
2017/08/06(日) 21:33:36.77ID:r2XWWSNC
誤読される可能性があるので追記
>>659
ガイジのID:ThMEkv3Iには読み取れなかったようだ
> When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;

良い時代になったもんだ 歴史的資料がきちんと公開されている
2017/08/06(日) 21:39:44.09ID:r2XWWSNC
>>654
ポインタ渡し w
謎用語を躊躇いなく使っちゃう ガイジの特徴だよなあ
2017/08/06(日) 22:38:49.98ID:fAxfwMN0
When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;

「配列の名前が関数の実引数として現れた時、その配列の先頭ポインタが渡される」でいい?
2017/08/06(日) 22:53:31.79ID:r2XWWSNC
どこにポインタなんて書いてあるんだ 見えないものが見えちゃうって精神科受診した方が良いぞ
2017/08/06(日) 22:57:19.94ID:fAxfwMN0
じゃあ君ならlocationはどう訳す?
2017/08/06(日) 23:15:47.82ID:jhhg/GBw
ポインタ渡しが謎用語らしい
コイツはもう覚える気すらないよ
つーかただのバカ
スルー推薦
2017/08/06(日) 23:17:56.61ID:r2XWWSNC
位置

そもそも
> A pointer is a variable that contains the address of another variable.
と言う定義を理解してないのか?
障害児製造機な入門書が存在らしいな
お前は何という本を初学時に使った?
2017/08/06(日) 23:20:53.44ID:UjkuucW3
一応言っとくけど、文字列リテラルを関数に渡す場合の説明は5.5章だぞ
2017/08/06(日) 23:22:53.35ID:r2XWWSNC
>>671
ガイジ用語か qiitaでいっぱいヒットするわ w
2017/08/06(日) 23:25:55.10ID:fAxfwMN0
>>672
直訳すると、「ポインタとは他の変数の位置を内包した変数である」。
"location of the beginning of the array"、直訳すると「配列の先頭の位置」はポインタ以外の何物だっていうのか教えてくれる?

ちなみに俺の初学本は「C言語によるプログラミング」第二版
2017/08/06(日) 23:25:56.83ID:AvyyeWcb
他人をガイジ呼ばわりしてるけど自分が1番ガイジだったってオチやね
2017/08/06(日) 23:38:53.59ID:fp1GLRR7
メモリ上の位置を表す「アドレス」と、それを格納する変数である「ポインタ」を混同してるから議論が噛み合わないのでは?
2017/08/06(日) 23:45:57.68ID:r2XWWSNC
>>675
ガイジか?
ポインタとは他の変数のアドレスを内包した変数である
としか書いてないのに、書かれてない「位置」がなぜ出てくる

まあ、それには目をつぶって
「内包した変数」が重要
Cの変数とは型を持ち、値を格納できるもの

アドレスとポインタ(=変数)を混同しないように
あと10年くらい修行することだ
2017/08/06(日) 23:45:58.32ID:fAxfwMN0
いうほど混同しているだろうか?
2017/08/06(日) 23:54:22.39ID:fAxfwMN0
>>678
えーともしかして、
「いわゆる『ポインタ渡し』ではアドレスがコピーされているのであってポインタ変数が渡されているわけではない」と言いたいの?
2017/08/06(日) 23:55:35.62ID:jhhg/GBw
コイツはまともな社会生活できてるのか
日常会話が成立出来ていないのではないか
2017/08/07(月) 00:00:10.79ID:Uo4tfgNR
>>680
ガイジ用語使うな
qiitaでヒットするそれはあえて言うなら「ポインタ渡され」
このスレで出現している「ポインタ渡し」はガイジID:jhhg/GBwが使い出した謎用語
2017/08/07(月) 00:02:00.78ID:bwSM+rxU
論点を三行でまとめて
2017/08/07(月) 00:07:08.67ID:r7C/NYo5
>>682
いわゆるって言ったのにそれでもダメか。

void foo(int a[8])と宣言された関数を別の関数内で

int a[8];
void foo(a)

と呼び出す時、それはポインタが渡されているのではなく配列の先頭アドレスがコピーされていると言いたいの?
2017/08/07(月) 00:09:51.87ID:uOfJK7yi
「ポインタ」って用語は結構仕様書中でも不安定だから、実はあまり気にしてもしょうがなかったりするんだよね
http://www.kijineko.co.jp/node/498
2017/08/07(月) 00:11:41.88ID:g8RW1Chx
>>684
foo(a) の 「a」って何?
2017/08/07(月) 00:13:35.75ID:r7C/NYo5
>>686
その上にint a[8];って書いたんだけど、なんか文法ミスってたかいな?
2017/08/07(月) 00:13:38.80ID:5EiEWIq+
このガイジ早く死刑にしろ
絶対何か障害持ってるだろ
何か起こしてからじゃ遅いぞ
2017/08/07(月) 00:16:29.93ID:DdwwpY1/
なるほど。やたらガイジ連呼してる奴が頭おかしいわけだな。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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