第四章 指针和数组
几乎每次讲课讲到指针和数组时,我总会反复不停的问学生:到底什么是指针?什么
是数组?他们之间到底是什么样的关系。从几乎没人能回答明白到几乎都能回答明白,需
要经历一段“惨绝人寰”的痛。指针是 C/C++的精华,如果未能很好地掌握指针,那 C/C++
也基本等于没学。可惜,对于刚毕业的计算机系的学生,几乎没有人真正完全掌握了指针
和数组、以及内存管理,甚至有的学生告诉我说:他们老师认为指针与数组太难,工作又
少用,所以没有讲解。对于这样的学校与老师,我是彻底的无语。我没有资格去谴责或是
鄙视谁,只是窃以为,这个老师肯怕自己都未掌握指针。大学里很多老师并未真正写过多
少代码,不掌握指针的老师肯定存在,这样的老师教出来的学生如何能找到工作?而目前
市面上的书对指针和数组的区别也是几乎避而不谈,这就更加加深了学生掌握的难度。我
平时上课总是非常细致而又小心的向学生讲解这些知识,生怕一不小心就讲错或是误导了
学生。还好,至少到目前为止,我教过的学生几乎都能掌握指针和数组及内存管理的要点,
当然要到能运用自如的程度还远远不够,这需要大量的写代码才能达到。另外需要说明的
是,讲课时为了让学生深刻的掌握这些知识,我举了很多各式各样的例子来帮助学生理解。
所以,我也希望读者朋友能好好体味这些例子。
三个问题:
A),什么是指针?
B),什么是数组?
C),数组和指针之间有什么样的关系?
4.1,指针
4.1.1,指针的内存布局
先看下面的例子:
int *p;
大家都知道这里定义了一个指针 p。但是 p 到底是什么东西呢?还记得第一章里说过,
“任何一种数据类型我们都可以把它当一个模子”吗?p,毫无疑问,是某个模子咔出来的。
我们也讨论过,任何模子都必须有其特定的大小,这样才能用来“咔咔咔”。那咔出 p 的这
个模子到底是什么样子呢?它占多大的空间呢?现在用 sizeof 测试一下(32 位系统):sizeof
(p)的值为 4。嗯,这说明咔出 p 的这个模子大小为 4 个 byte。显然,这个模子不是“int”,
虽然它大小也为 4。既然不是“int”那就一定是“int *”了。好,那现在我们可以这么理解
这个定义:
一个“int *”类型的模子在内存上咔出了 4 个字节的空间,然后把这个 4 个字节大小的
2021-12-14 11:29:34
1012KB
c语言
1