第一 指针是什么?
指针就是一类变量,是一类包含了其他变量或函数的地址的变量。与其他变量所不同的是,一般的变量包含的是实际的真实的数据,而指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据。它里面存储的数值被解释成为内存的地址。
指针有四个方面的内容:即指针的类型,指针所指向的类型,指针的值,指针本身所
占有的内存区.
第二:指针的类型以及指针所指向的类型是什么?
指针的类型是指把指针声明语句中的指针名字去掉所剩下的部分。这是指针本身所具有的类型。
当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么类型来看待。从语法的角度看,指针所指向的类型是指针声明语句中的指针名字和名字左边的指针声明符*去掉所剩下的部分。
int*ip; //指针的类型是int* **** 指针所指向的类型是int
char*ip; //指针的类型是char* **** 指针所指向的类型是char
int**ip; //指针的类型是int** **** 指针所指向的类型是int*
int(*ip)[5]; //指针的类型是int(*)[5] **** 指针所指向的类型是int()[5]
第三:指针的值是什么?
指针的值或者叫指针所指向的内存区或地址,是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。 指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。 指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在上例中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。