变量i,值为1,存放值1的地址为0x2000
地址:房间, 内容:key
P存放的内容是i的地址,及p - &i
&p:指针p的地址为0x3000
p的内容,*p,指向地址0x2000里面的内容,即1
book@100ask:~/C_coding/CH01$ cat pointer.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 1;
int *p;
p = &i;
printf("i = %d\n",i);
printf("&i = %p\n",&i);
printf("p = %p\n",p);
printf("&p = %p\n",&p);
printf("*p = %d\n",*p);
exit(0);
}
book@100ask:~/C_coding/CH01$ make pointer
cc pointer.c -o pointer
book@100ask:~/C_coding/CH01$ ./pointer
i = 1
&i = 0x7ffd9943dbdc
p = 0x7ffd9943dbdc
&p = 0x7ffd9943dbe0
*p = 1
book@100ask:~/C_coding/CH01$ cat pointer2.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 1;
int *p;
p = &i;
printf("%d\n",sizeof(i)); //int型变量占用4字节
printf("%d\n",sizeof(p)); //指针型变量占用8字节,由于是64位计算机,因此8字节
printf("i = %d\n",i);
printf("&i = %p\n",&i);
printf("p = %p\n",p);
printf("&p = %p\n",&p);
printf("*p = %d\n",*p);
exit(0);
}
book@100ask:~/C_coding/CH01$ ./pointer2
4
8
i = 1
&i = 0x7ffcb56394fc
p = 0x7ffcb56394fc
&p = 0x7ffcb5639500
*p = 1
book@100ask:~/C_coding/CH01$ cat pointer1.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 1;
int *p;
double *d;
float *q;
char *c;
printf("%d\n",sizeof(p));
printf("%d\n",sizeof(d));
printf("%d\n",sizeof(q));
printf("%d\n",sizeof(c));
}
./pointer1
8
8
8
8
由于是64位计算机,不同类型的指针变量,均占用8字节