c & c++中的“指针、指针变量、指针变量的类型”

来源:互联网 发布:鼎信诺审计软件win10 编辑:程序博客网 时间:2024/05/21 08:01

1.1    c & c++中的“指针、指针变量、指针变量的类型”  

1.1.1  指针:

1.是变量的地址

2.指针的长度和计算机的字长相关,例如:在32位计算机中,指针的长度是32位,即4字节;在64位计算机中,指针的长度是64位,即8字节。

 

1.1.2  指针变量

就是c语言中一个普通变量,指针变量所保存的值,是某个变量的地址。例如,int a;  int  *pa = &a; 这里的指针变量pa 的值是变量 a的地址。

 

1.1.3  指针变量的类型

例如,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;