CSAPP第三章看到3.8了,这一节在讲关于数据的表示,其中提到了指针的运算,本来自己只是想实践一下加深点印象,没想到小小的测试程序还又学到了一些新知识,觉得有必要记录一下:
1、首先是正题,关于指针的加减法,所得结果与指针所指的类型有关。例如指针指向int
,那么加减都以4个字节为单位,如果指向char
,那么加减都以1个字节为单位,下面是测试代码及运行结果的截图。可见整型指针地址增加了4,字符型指针地址增加了1
2、打印字符指针的地址时,如果也直接使用cout << b
会打印出a
和空字符,因为C++重载了>>
会直接打印出字符串的值而不是地址,想要打印出指针的地址需要使用static_cast<void*>
从而避免重载
3、这里使用delete
时要注意,由于此时两个指针都已经没有指向内存了,所以需要将地址减一才能正确释放内存,否则会crash
关于C++指针的加减法
最新推荐文章于 2024-09-21 15:28:09 发布
本文记录了作者在阅读CSAPP第三章中关于数据表示部分的学习体验,重点探讨了指针的加减运算及其与指针类型的关系。通过测试代码,作者发现指针的地址增减取决于其指向的数据类型,如int指针按4字节,char指针按1字节变化。此外,还提到了C++中打印字符指针地址的注意事项,需要使用static_cast<void*>避免重载。在释放内存时,若指针已丢失有效地址,需要适当调整才能正确删除。
摘要由CSDN通过智能技术生成