指针:地址+类型(地址代表的空间存的数据类型) *代表地址
指针变量
int 是类型
- 代表pa是个指针变量
pa 这个变量中存的是代表a的空间的地址
int *pa = &a;
printf ("&a = %p\n", &a);
printf ("pa = %p\n", pa);
-
*有两层含义
1、定义变量代表类型是个指针变量
2、在使用的时候和指针结合,就代表那个地址所在的空间
指针变量的两块空间
1、指针变量本身所拥有的空间
2、指针变量内部空间的值所代表的空间 -
& : 取变量的地址
打印地址用 %p
地址的长度:32位系统是 4个字节, 64系统是 8个字节
printf ("a 的地址 :%p\n", &a);
printf ("sizeof &a:%lu\n", sizeof(&a));
- 指针的运算,只有加减,其他运算是没有意义的:
步长:指针做加减运算的时候 增量和 类型有关
以int 类型举例:
pa + 1 == (unsigned long)pa + sizeof(int) == 0x1000 + 4
int *pa = (int *)0x1000;
int *pb = pa + 1;
unsigned long l = (unsigned long)pa + 1;
printf ("pa = %p\n", pa);
printf ("pb = %p\n", pb);
printf ("l = %lx\n", l);
int *pa; // 野指针,不知道指向哪块空间
// 杜绝野指针,定义指针的时候给赋初值
int *pb = NULL; // 空指针
*&a == *(&a) == *pa == a
&*pa == &a == pa