ポインタ変数は変数名の前に「*」(アスタリスク)を付けて宣言します。
int *p;
ポインタ変数には変数のアドレスを代入します。
int a = 1;
p = &a;
ポインタの参照先の値は*をつけて表現する
printf("%d\n",*p);
printf("%d\n",*(&a));
表にすると
| 宣言 | アドレス | (参照先の)値 |
-----------------+---------+----------+----------------|
ポインタ変数(p)| int *p; | p | *p |
変数(a) | int a; | &a | a or *(&a) |
ポインタのポインタ(ポインタ変数のアドレス)
**p
[root@rhel74 c]# cat pointa.c
#include <stdio.h>
int main(){
int a = 1;
int *p;
int **pp;
p = &a;
pp = &p;
printf("aのアドレス:%p\n", &a);
printf("aのアドレスの参照先(=a):%d\n", *(&a));
printf("pの値(=アドレス):%p\n", p);
printf("pの値(=アドレス)の参照先:%d\n", *p);
printf("ppの値(=アドレス):%p\n", pp);
printf("pのアドレス:%p\n", &p);
}
実行結果
aのアドレス:0x7ffde7226b94
aのアドレスの参照先(=a):1
pの値(=アドレス):0x7ffde7226b94
pの値(=アドレス)の参照先:1
ppの値(=アドレス):0x7ffde7226b88
pのアドレス:0x7ffde7226b88
●char型配列について調べた
char buf[100] = 'hello';
char buf2[100] = 'hello\0hello';
printf("%s\n",buf); <-この「buf」は「&buf[0]を意味する。出力結果は「hello」。自動で\0を追加するのだろう。
printf("%s\n",buf2); <-出力結果は「hello」。\0まで表示するのだろう。