1.是变量的地址
2.指针的长度和计算机的字长相关,例如:在32位计算机中,指针的长度是32位,即4字节;在64位计算机中,指针的长度是64位,即8字节。
就是c语言中一个普通变量,指针变量所保存的值,是某个变量的地址。例如,int a; int *pa = &a; 这里的指针变量pa 的值是变量 a的地址。
例如,int * pi , char *pc , long *pl ,unsigned short *ps 等,这些都是指针变量,他们的类型分别是 int , char , long , unsigned short 。
下来讨论一下,指针变量类型的特性:
1、指针变量是用来保存变量地址的,指针变量的类型和他所表示的变量的类型没有直接关系,即,某一类型的指针变量可以保存任意类型变量的地址。
例一:
char is[4] = {0x11,0x22,0x33,0x44};
int *p = (int *) is;
int a = 10;
char *pa = &a;
2、当对指针变量进行“提领(dereference)运算,也就是*p运算”的时候,所操作的内存字节大小就是sizeof ( 指针变量类型 )
例二:
char c = ‘c’;
int *p = &c;
int x = *p;
例子中的 *p ,将会一次性访问4字节的内存,也就是从变量c的地址开始,访问4个字节。
注意,这里只是举例,这段代码会引起严重的内存错误,许多内存问题也就是这么来的。慎重!!!
3、对指针变量进行算术运算的时候,指针变量的值的变化和指针变量的类型相关
例三:
char * pc =0x11223344;
pc++;// 此时pc的值就是0x1122334455,pc的值增加了1
int *pi =0x11223344;
pi++; // 此时pi的值是0x11223348 ,pi的值增加了4 = 1 *sizeof(int)
int *pi1 =0x11223344;
pi1 = pi1 + 3;//此时pi1的值是0x112250, pi1的值增加了12 = 3 * sizeof(int)
int *px1 =0x11223344;
int *px2 =0x11223320;
ptrdiff_t diff =px1 – px2;
diff的值就是(0x11223344 - 0x11223320)/ sizeof(int) = 9;