指针也是变量,是一种特殊形式的变量。它用来存放其它变量的地址 (且只能存放地址)。
特殊在哪儿?
p它的‘值’是别人的地址;
p它的类型用来指导其行为,而非指导开辟自身空间;
p可以定义为 void 类型;
p它提供了间接访问目标变量的一种手段。
指针是C语言提供给编程者通过变量操纵硬件地址的一种方法,这实际表现了指针访问目标时不受作用域约束的 “特权”。
指针本身占了多大的内存?
你只要用sizeof(指针的类型)测一下就知道了。在32位平台上,指针本身占据了4个字节的长度。
由于指针总是和内存打交道, “指针本身占据的内存”和“指针指向的内存”二者都有内存,请注意二者的区别。
char ch = ‘A’;
char*cptr = &ch;
ch占有一块内存,
cptr也占有自己的内存,
它们是两块不同的内存。
sizeof(cptr)为4字节;
sizeof(*cptr)为1字节。
经常见到这样的描述:
“一维数组是一级指针”、“二维数组是二级指针”、
“数组名可以作为指针使用”、“数组名就是…的常指针”、
“数组名就是… 的指针常量”、“指针就是地址”......
不过非常遗憾,这些说法都是错误的!
错就错在将“名称”和“内容”混为一谈。当 int a = 9;时,
a是“名称”,9是“内容”。
指针是一种容纳地址的变量,通常叫指针变量,简称指针,是名称。
而地址,是内存单元的编号,它是一个常值,是指针中的内容。
指针绝不等同于地址,一个是装地址的变量,一个是地址常量,千万不要把二者意义混淆。
数组名是个常地址,不可称为指针。