#include<stdio.h>
int main(void) {
    int *p;
    int k = 123456;
    int t;
    p = &k;
    t = *p;
    printf("p=%p, t=%d\n", p, t);
    return 0;
}
$ gcc main.c -o main && ./main
p=0xfffff6a796e8, t=123456
&kはアドレスで、ポインタを代入は値の代入になる
### 割り当てられていない領域をアクセス
int main(void) {
    int *p;
    int k = 123456;
    int t;
    p = &k;
    p++;
    t = *p;
    printf("p=%p, t=%d\n", p, t);
    return 0;
}
p=0xffffd0f0d40c, t=65535
pのアドレスを一つ進めているので、異なる値が表示される
### 割り当てられている領域をアクセス
int main(void) {
    int *p;
    int k[2] = {12345, 67890}; // 配列
    int t;
    p = &k[0];
    p++;
    t = *p;
    printf("p=%p, t=%d\n", p, t);
    return 0;
}
$ gcc main.c -o main && ./main
p=0xfffff62356e4, t=67890
配列の場合は、ポインタを一つ進めると、配列の次の値となる。
int main(void) {
    int *p;
    int k[2] = {12345, 67890}; // 配列
    int t;
    p = k;
    p++;
    t = *p;
    printf("p=%p, t=%d\n", p, t);
    return 0;
}
$ gcc main.c -o main && ./main
p=0xffffecd87384, t=67890
配列kは、kの先頭アドレスを指す
int main(void) {
    int *p;
    int k[3] = {111, 222, 333}; // 配列
    int t;
    p = &k[1];
    p++;
    t = *p;
    printf("p=%p, t=%d\n", p, t);
    return 0;
}
$ gcc main.c -o main && ./main
p=0xffffc27bcfc0, t=333
これは説明不要
int main(void) {
    int *p;
    int k[3] = {111, 222, 333}; // 配列
    int i;
    p = k;
    for(i =0; i < 3; i++){
        int value = *p++;
        printf("value=%d\n", value);
    }
    return 0;
}
$ gcc main.c -o main && ./main
value=111
value=222
value=333
配列の先頭アドレスから出力している
配列をポインタに代入して、ポインタを進めることで、配列の値を出力するというのは多用できそうですね。