对于学习c语言的人来说,如果你不了解指针,那是没有用的。对于学习c++而言,不会容器都不好意思说你学过c++。今天只想分享我对c中指针和数组的理解,本人也是一名在校的学生,理解能力不足之处还望不吝赐教。
(1)含义:数组,其实可以简单的理解为相同类型的一个集合。好比一个特务组,里面都是特务,只是各自的编排顺序不同,而元素的地址可以理解成代号。而指针就是一个领导,指针有指挥这些特务的权利。以int a[10];int * p=&a;为例。这个就是p有权命令数组的授权过程,因为指针p把数组中第一个特务的代号记住了,存档案了,但他不知道具体是谁。*号的权利就是将具体是谁指出来,他的权利就是获取特务的真是姓名。*p++等同于*(p++),原因就是在于优先级的问题.
(2)大小 :对于一个指针,他自己的大小就是占有4个字节,这是系统给他分配的。但是对于一个数组int a[10],它的大小是sizeof(a[0])*10,指针四个字节就是存放代号的,而数组的大小与所属的类型和自己向系统要分配的个数有关。在这里我们应该知道sizeof(p),sizeof(a),sizeof(&a),sizeof(a[10])和sizeof(&a[0]),大小有分别是多少那。你可以自己编码试试就明白了。
在这里,单个数字名a出现表达的是数组首元素的地址,&a表示的数组的首地址,现在应该知道a+1和&a+1的区别了吧。a+1相当于a[1],而&a+1相当于a+sizof(a),跳过了整个数组。上面的sizeof(a[10])可以这样理解,虽然a[10]不存在,定义时候int a[10];是不是这样好记点啊