[過去ログ] C言語なら俺に聞け 163 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
59
(1): (ワッチョイ 47b1-D/hx) 2024/09/07(土)20:51 ID:XGt+Z3l/0(1) AAS
どこかの国だか村では両手の指の数以上を表現する言葉がないって話をどこかで・・・。
60
(1): (ワンミングク MM3f-cmcv) 2024/09/07(土)22:06 ID:GNvzZpYIM(1) AAS
ムカデは100進数で数えている
61
(1): (ワッチョイ f94a-865n) 2024/09/08(日)00:25 ID:zd6RlSMM0(1/2) AAS
>>59
位の概念が無いから10までしか数えられない
位を考慮すると両手で1023まで数えられる
62
(1): (ワッチョイ f94a-865n) 2024/09/08(日)00:30 ID:zd6RlSMM0(2/2) AAS
指を曲げる伸ばすの2通りとすると1023だが、指を完全に曲げる、伸ばす、半分まで伸ばす(曲げる)の3通りとすると3^10-1=59,048まで表現できるなw
63: (ワッチョイ 662a-Vk/b) 2024/09/08(日)07:38 ID:LXYiwE7e0(1) AAS
>>60
ヒトを含めた四肢類は4進法なの?
64: (ワッチョイ bd5f-FAeb) 2024/09/08(日)10:08 ID:mVbg4wOX0(1) AAS
>>61-62
人差し指と薬指を伸ばして、かつ中指と小指を曲げるのは難易度がやや高いぜ。
(親指を伸ばせば『グワシ』)
65: (ワッチョイ 6663-QZ+t) 2024/09/08(日)10:25 ID:IhFVsGpe0(1) AAS
グワシは古語
66: (ワッチョイ a510-IFMZ) 2024/09/08(日)15:41 ID:aTNFTtUw0(1) AAS
とりあえず、他人の投稿で言ってもいない単語や解釈を勝手に加えてマウント取ろうとするのはどうかと思うぞ。
67: (ワッチョイ a6e0-RtM0) 2024/09/08(日)23:23 ID:6gnZvy5A0(1) AAS
問題はギャグとしてつまらないという点だ
68
(4): (ワッチョイ fa2d-2PHd) 2024/09/09(月)17:06 ID:ft14UVke0(1) AAS
lvalueに関してエラーが出るんだけど、どうしてこれがだめなのかわからないです

#include <stdio.h>

int main()
{
char s[] = "hoge";
char t[100];
while (*t++ = *s++)
;
printf("%s", t);
}
69: (ワッチョイ 6663-QZ+t) 2024/09/09(月)17:17 ID:JnQxQHVK0(1/3) AAS
>>68
 char *p = s;
 char *q = t;
 while (*q++ = *p++)

こう書けば通る。何故かはちょっと考えて ;
70: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-IU9Y) 2024/09/09(月)17:19 ID:XH4OT6yj0(1/2) AAS
>>68
s の型は char[5] 、 t の型は char[100] だというのはわかる?
だけど式に出てくる配列は原則として配列の先頭要素を指すポインタ (この場合に型でいえば char*) に型変換される。
変換後に出てくるポインタは rvalue なのでインクリメントの対象に出来ない。

rvalue ってのは式の評価をする間に一時的に生まれて評価が終わったら消えるものなので
仮にインクリメント出来たとしても何にも使えない。

配列が勝手にポインタに変換されるっていうのが変則的で分かり難いポイントだけど
これは C を使ってたら避けようがない。
71
(1): (ワッチョイ 9e79-auhz) 2024/09/09(月)18:22 ID:zvC05GrM0(1) AAS
ポインタと同じ表記が使えるだけでポインタに変換されるわけではないぞ老害
72: (ワッチョイ 6663-QZ+t) 2024/09/09(月)18:25 ID:JnQxQHVK0(2/3) AAS
 char *s = "hoge";
 char t[100];
 int i = 0;
 while (*(t+i) = *s++)
  i++;

sを配列ではなく、ポインタに変える、
tもポインタにしたいところだが、格納先確保が目的なら
先頭アドレスからのオフセット指定で格納する様に変更
73: (ワッチョイ eaad-Pebh) 2024/09/09(月)18:30 ID:D7I9z5W00(1) AAS
それなら while (*(t+i) = *(s+i)) って書くかな
74: (ワッチョイ 6663-QZ+t) 2024/09/09(月)18:36 ID:JnQxQHVK0(3/3) AAS
s[]、t[100]と書いたとき、sやtはメモリー上の特定の位置を指す
ラベルのようなものなので書き換える事は出来ない。ポインタ定数とも言う。
一方ポインタ変数は、任意のアドレスを指す変数、変更も操作できる
constとか、突っ込まんでください
75: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-IU9Y) 2024/09/09(月)18:57 ID:XH4OT6yj0(2/2) AAS
>>71
規格には「型変換する」と明瞭に書いてあって変換しないと解釈できる余地はない。
76: 68 (ワッチョイ fa2d-2PHd) 2024/09/10(火)07:06 ID:fwzKZR690(1) AAS
色々教えてくれてありがとう
s[]の先頭を指すポインタ*sを++で進めることができちゃったら
s[0]もズレちゃうのでだめだってことだよね
そりゃだめだわ
77
(1): (ワッチョイ 1e6e-Qzc4) 2024/09/10(火)07:45 ID:ZXVJVLjy0(1) AAS
s[], t[100]; って宣言したなら、s[idx], t[idx] って使おうよ
78: (ワッチョイ a6b5-RtM0) 2024/09/10(火)08:09 ID:oAzej4EH0(1) AAS
そこはこだわらんでもいいだろ
79: 警備員[Lv.5][新芽] (ワッチョイ f969-ztXh) 2024/09/10(火)09:09 ID:H8O84G940(1) AAS
sやtは constということでもないのか
80: (ワッチョイ 6663-QZ+t) 2024/09/10(火)10:14 ID:WwqiNfks0(1) AAS
立て札は移動禁止です
81
(1): (アウアウエー Sa52-t/33) 2024/09/10(火)13:19 ID:KGjTz1X0a(1) AAS
>sやtは const
constっていつからあったか知らんけど
constない頃からsもtも*pや*qとは扱いが違ったんじゃね
82: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-IU9Y) 2024/09/10(火)14:04 ID:rqI1GpSt0(1/2) AAS
lvalue の概念は K&R 1st の頃からあったよ。
lvalue という用語はちょっとどうなの……と思うけど。
Rust だと place と呼んでるみたいだね。
83: (ワッチョイ eafd-BHET) 2024/09/10(火)21:10 ID:UL+jlunn0(1) AAS
お前は変な事ばかり言ってるからもう引っ込んどけよ
84: (ワッチョイ adba-mB8c) 2024/09/10(火)21:22 ID:OwUxLa4s0(1) AAS
ポインタそのものを変えないやつと
指す先を変えないやつの書き方で
未だに迷うっていう
85: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-IU9Y) 2024/09/10(火)21:35 ID:rqI1GpSt0(2/2) AAS
キーワードを並べる順序で意味が変わるのは迷うけど
順序をどうならべても良い場合もそれはそれでびっくりする。

int const long foo;

みたいに変数を宣言して良い。
まあそんなことをするやつはいないと思うけど。
86: (ワッチョイ a6ee-865n) 2024/09/10(火)22:53 ID:BKdRZcpD0(1) AAS
consr char*は本当はchar const*と書くべきなんだよね
これでもコンパイルは通って同じ結果になる
読む時は右から読めばいい
pointer to const char
これだと指す先がconstなのが分かりやすい
ポインター自体をconstにするには
char* constとして、同じく右からconst pointer to charと読む
両方constは
char const* const
となるけど、最初のconstは左に書けるので
const char* const
とも書ける
これが分かれば迷う事は無くなる
87: (ワッチョイ a6b2-Z1Qu) 2024/09/11(水)01:20 ID:ZbZmMQbl0(1) AAS
それ前橋氏のポインタ完全制覇で知った
88
(1): (ワッチョイ a6b5-RtM0) 2024/09/11(水)08:00 ID:eq6A6T9x0(1) AAS
>>81
アセンブラにして考えるとわかりやすい

char s[] = "hoge";
アセンブラの表現↓
s:
   .db "hoge¥0"

char *s = "hoge";
アセンブラの表現↓
s_org:
   .db "hoge¥0"
s:
   .dw s_org

上の場合書き換えようにもsには実体がない
アドレス定義ラベルでしかない

*ただし完全に最適化されると下も上と同じになる
   
1-
あと 914 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.026s