スレを勃てるまでもないC/C++の質問はここで 25 [隔離病棟]©2ch.net (467レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
158: 2017/08/09(水)00:47 ID:hEgnFYnk(1/4) AAS
int *p;が逆参照したときにintとして扱えるように
int (*p)[10];が逆参照したときに配列として扱えるように
(君の言い分だと↑も[10]を勝手に付け足しているように見えるのかもしれないが)
型というものがあって、コンパイラは型を知っているから正しくアクセスできる
同じように
void (*p)(int i);としたとき、pはintを引数に取る関数のポインタという「型」になるから
その型をもってしてコンパイラは関数を呼び出せる
そう考えれば(int i)が付くのも当たり前、それが必要だからそういう文法になっている
「アクセスするときに必要となる情報を型として与えているのだよ」
特にCの場合は「そう見なしてくれ」という意味合いが強い
省4
159(1): 2017/08/09(水)00:52 ID:hEgnFYnk(2/4) AAS
ちなみに
>>157は間違ってるから気にしなくてよいよ
C言語は静的型だから「実際に行かなくても先にあるものが分かる」
というか、先に何があろうが、「型」の示すものがあるものとして扱う
だから、病院の型のポインタに君の家のアドレスを入れたら
君の家に病人が殺到してバグる
キャストしなければそういう代入は出来ないようになっているがな
160: 2017/08/09(水)01:02 ID:hEgnFYnk(3/4) AAS
逆に、C言語は静的型だから、「実際に行ってみても、それが何であるか分からない」
住所に行ってみても、名札も無ければ看板も無いので、それが何なのか分からない
そういった情報は全部メタ的に「型」にしかない
そして型はコンパイル時のコンパイラしか知らない
コンパイル後のコードには型情報は綺麗さっぱり消えてなくなってる
C言語はデータになんであるかを示す型情報が無い
実行時にデータから型を取得することはできない
なんで、関数ポインタの型にはそれを通して関数を呼び出せるだけの情報が必要
そういうことが出来る文法になってる
161: 2017/08/09(水)01:04 ID:hEgnFYnk(4/4) AAS
>そして型はコンパイル時のコンパイラしか知らない
あとプログラマとね
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.010s*