要是说起C语言里面哪一部分最难,可能大多数人的回答就是“指针”,确实不假。指针可能是好多初学C语言者的一大难题。但是其实指针难就难在了它的名字上。为什么这么说呢,你尝试着将所有用“指针”表达的地方,全部改为“地址”。比如你要表达“指针变量”,你就改成“地址变量”;你要表达“定义一个指针变量”,改成“定义一个地址变量”。然后你就会发现原来指针也并不是很难。那为什么可以将指针改为地址呢?
原因是这样的:我们知道,指针变量是用来保存另外一个变量的地址的。按照平常我们学习C语言的套路 定义整型变量是用来保存整型数据的,浮点型数据是用来保存浮点类型的数据的……依此类推。我们就能很容易想到地址类型就是用来保存地址的,指针就是用来保存一个变量的地址的,所以我们就可以在理解指针的时候,将它理解为地址变量,这样在理解起来指针的之后,就很容易了。
要全面的理解指针,我们还需要了解的东西有以下四点:
1.指针的类型:
从语法的角度上来说,在判断一个变量的类型的时候,我们只需要去掉声明语句里面的变量名就好了。一般的,有以下几种的类型:
(1)int*p;//指针的类型是int*
(2)char*p;//指针的类型是char*
(3)int**p;//指针的类型是int**
2.指针所指向的内容的类型:
通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么类型来看待。从语法上看,只须把指针声明语句中的指针名字和*去掉,剩下的就是指针所指向的类型。例如:
(1)int*ptr; //指针所指向的类型是int
(2)char*ptr; //指针所指向的的类型是char
(3)int**ptr; //指针所指向的的类型是int*
在这里我们一定要区分开指针的类型,和指针所指向的类型,两者有着较大的区别。
3.指针保存的值:
指针是用来保存一个变量的地址,所以指针里面保存的是一个地址值。
4.指针的大小:
指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32 位平台里,指针本身占据了4 个字节的长度。而在64位平台里面则占据了8个字节。