[cpp] #include<iostream> using namespace std; int main(void) { int *ptr; int value = 1; ptr = &value; int *p = ptr; cout 《 p 《 endl; /****************************************************************** 类比一下,指针比作信封 引用比作邮箱 值比作房子 ok,我们在信封上面写上邮寄的地址(引用地址), 我们来取值就相当于地址 对应的房子。我们也可以把信封上的地址涂掉,然后写上其他的我们想要的地址 房子是在哪里不动的,所以不受影响。 *******************************************************************/ int *ptrs;//未初始化 int *ptring = NULL;//NULL指针 void *vptr;//void指针 未初始化 int *iptr; int *vastptr; //void类型可以存储任意类型的指针或者引用 iptr = &value; vptr = &value; cout 《 iptr 《 vptr 《 endl; //显示类型转换 把一个void指针转换成int指针,并取值。 vastptr = static_cast<int*>(vptr); //(int*)vptr; cout 《 *vastptr 《 endl; //cout 《 ptrs 《 ptring 《 endl; /******************************************************************** 数组是一断连续的内存空间,来存储多个特定类型的对象。 指针用来存储单个内存地址 所以数组和指针不是相同的结构,不能互相转换。 数组变量是一个常量,就算指针变量指向相同的地址或者一个不同的数组, 也不能把指针赋值给数组变量。 我们可以把数组变量赋值给指针时,世界上把指向数组第一个元素的地址赋值给指针。 要注意的是:指针需要和数组元素类型保持一致,除非指针是void类型。 ********************************************************************/ int myarray = {1, 2, 3, 0}; int *ptrarray = myarray;//*ptrarray = &myarray[0]; cout 《 *ptr 《 endl; //ok上面的操作时正确的。来看下面的错误 //myarray = ptrarray; //myarray = myarrays; //myarray = &myarrays[0]; /******************************************************************* 结构体和指针。 与数组类似,指向结构体的指针存储了结构体第一个元素的 内存地址。 结构体的指针必须声明和结构体类型保持一致 或者为void *******************************************************************/ struct person{ int age; char *name; }; struct person first; struct person *ptrstruct; first.age = 22; char *fullname = “full name”; first.name = fullname; ptrstruct = &first; cout 《 first.age 《 ptrstruct->name 《 endl; return 0; } |