指针是 C/C++ 功能最强大的工具之一,也是最危险的,因为他们允许执行对计算机不友好的操作,比如使用未经初始化的指针来访问内存或者试图释放同一个内存块两次。 本小节主要介绍指针的基本知识。
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。指针的四要素:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。
1.指针的类型
声明指向特定类型的指针,使用格式:
typename * pointername;
例如:
(1)int* ptr; //指针的类型是 int*
(2)char* ptr; //指针的类型是 char*
(3)int** ptr; //指针的类型是 int**
(4)int (*ptr) [3];//指针的类型是 int(*)[3]
(5)int* (*ptr) [4]; //指针的类型是 int*(*)[4]
2.指针所指向的类型
当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容的当做什么类型来对待。
例如:
(1)int *ptr; //指针所指向的类型是 int
(2)char *ptr; //指针所指向的的类型是 char
(3)int* *ptr; //指针所指向的的类型是 int*
(4)int (*ptr) [3];//指针所指向的的类型是 int()[3]
(5)int* (*ptr) [4]; //指针所指向的的类型是 int*()[4]
3.指针的值
指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。
给指针赋值,可以对变量名应用&运算符,来获得被命名的内存的地址, new 运算符返回未命名的内存的地址。
例如:
double * pn;
double * pc;
double bubble = 3.2;
pn = &bubble; //把bubble的地址赋予pn
pc = new char;//把新分配的内存(char类型)的地址赋予pc
4.指针本身所占据的内存区
指针本身占了多大的内存?你只要用使用 sizeof(指针的类型) 测试一下就知道了。在 32 位系统中,所有类型的指针的值都是一个 32 位整数。