前言
C语言的指针在理解之后是非常容易且方便的,但是之前总是编译通过就走了并没有关注warning,学习c++之后因为对指针的使用要求更加严格了一些,之前的不规范指针使用就慢慢暴露出来。
一、如何用指针存数组
数组和函数都表示着一串数据或一条操作的首地址,那么就可以用指针来表示。但具体用什么类型,用几级指针之前我都是囫囵吞枣能跑就行。因为用*a可以来表示一个数组,让我一直以为二维数组是完全可以用**a来表示的,在力扣平台上这样也确实常常能完成题目,但在编译器上一跑很快就能发现**a并不能完成二维数组的功能。这是因为他漏掉了一个很重要的特性:指针+1之后指向新的位置是不同的。这里以a[3][4]举例,正确的写法应该是*a[][4],对于前者+1只跨越sizeof(int)的距离,而后者是4*sizeof(int),他就可以完成二维数组的功能。但若只是存储一个二维数组,你用int *甚至是char*都是可以的,因为他们前面的类型也只代表着他们+1跳过的距离,并不影响他们存储一个首地址。
二、指针使用时C与C++的差别
既然随便一个指针都能表示我的数组函数等,那我上面岂不是在说废话吗?注意上面的用法除了正规的写法其他都是会warning的,但是C语言为了方便程序员想在任何时候方便的查找到地址,允许程序对于地址的类型只是决定着该地址每次+1跨越的距离,而没有限制他存什么东西。c++在这一方面更加的严格,你会发现你类型不匹配或者是指针的级数不对你都是跑不了代码的,认识正确书写指针的格式还是非常重要的!
总结
以后要学习c++的新手们一定要注意平时书写指针的规范,对于一个指针的应用写的好是能让你事半功倍的,指针的类型方面也要灵活的调整,让整个程序可以执行的非常的灵活。