char* ptrかchar *ptrか

表題にかんして殴り合いの喧嘩になった。

①char* pは…
・型名がchar* = intみたいなもの、と考えて良い
・char*型のポインタ(の変数名)がp
尚、
char*p;
char *p;
char* p;
char * p;
4つ全て同じ意味!!今世紀最大のびっくり、しゃっくり…

どれも変数pを宣言しており、どれもpの型はchar*。
すなわちcharのポインタになる。char Aがどこかメモリ上に確保されていて、そのアドレスがp(pにはアドレスが入っている・単にpと書くと何かしらのアドレスが得られる)。

②上のアドレスp(char*型のポインタ=アドレス)が指している値を、取り出す変数が*p(*pはA!!)

③char* p;
p = "ABC";
と表記する。何故なら(?)
string = char*
と見なしてよいので
string p;
p = “ABC”;
であれば当たり前だから。

※string は1byteのchar、の配列の一番初めの文字のアドレス(=番地)を指している

④以下、両者同じものを指す
char* a, b;
char *a, b;
どちらの表記であっても、
aはchar*型、bはchar型になる。
→特にポインタを扱っているときは、同じ行に複数変数を定義しないのが良い。

⑤char* p = “ABC”;
というのは、
char alphabet = { ‘A’, ‘B’, ‘C’, ‘\0’ }; // global
char* p;
p = alphabet;
と同義(alphabet
(宣言の時のみ)はarrayだが、alphabet(とだけ表記した場合)はarrayの先頭の要素を指し示すポインタである)
f:id:owan_k:20160906200616p:plain
https://www.sgnet.co.jp/c/7-4.html