指针【一】(C/C++)
1. 什么是指针
指针为C/C++中的一种变量,与常见的 int
, double
等相似,只不过指针变量存储的是一段地址。因此,可以在将指针看做门牌号。C/C++中,可用以下方法定义指针
type *var_name;
其中, type
是指针的基类型,它必须是一个有效的 C/C++ 数据类型, var-name
是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。
但是,在这个语句中,星号是用来指定一个变量是指针。
如下就是指针的有效声明
int *ip; //整型指针 double *dp; //双精度浮点型指针 char *cp; //字符型指针
实际上,所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。
不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。
比如:
int *ptr; //指针的类型是int*
char *ptr; //指针的类型是char*
int **ptr; //指针的类型是int**
int (*ptr)[3]; //指针的类型是int(*)[3]
int *(*ptr)[4]; //指针的类型是int*(*)[4]
你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。我们在后面将会讨论。因此,用与数据类型不相符的指针操作数据会出错。**
敲错门肯定完蛋
华丽的分割线
2.指针的值(指针的指向)
由上可知,指针也是一种变量,因此它具有变量的通性——可赋值,也就是说,指针也是有值的。指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个普通的数值。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(type)
的一片内存区域。通常情况下,如果通过 cout
输出指针的值,它大概长这个样子 0xef0002781b
。
以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX 为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。
毕竟只有门牌号没有房子