关于C++指针的加减法

本文记录了作者在阅读CSAPP第三章中关于数据表示部分的学习体验,重点探讨了指针的加减运算及其与指针类型的关系。通过测试代码,作者发现指针的地址增减取决于其指向的数据类型,如int指针按4字节,char指针按1字节变化。此外,还提到了C++中打印字符指针地址的注意事项,需要使用static_cast<void*>避免重载。在释放内存时,若指针已丢失有效地址,需要适当调整才能正确删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSAPP第三章看到3.8了,这一节在讲关于数据的表示,其中提到了指针的运算,本来自己只是想实践一下加深点印象,没想到小小的测试程序还又学到了一些新知识,觉得有必要记录一下:
1、首先是正题,关于指针的加减法,所得结果与指针所指的类型有关。例如指针指向int,那么加减都以4个字节为单位,如果指向char,那么加减都以1个字节为单位,下面是测试代码及运行结果的截图。可见整型指针地址增加了4,字符型指针地址增加了1
在这里插入图片描述
2、打印字符指针的地址时,如果也直接使用cout << b会打印出a和空字符,因为C++重载了>>会直接打印出字符串的值而不是地址,想要打印出指针的地址需要使用static_cast<void*>从而避免重载
3、这里使用delete时要注意,由于此时两个指针都已经没有指向内存了,所以需要将地址减一才能正确释放内存,否则会crash

C++中,字符串的"加减法"通常是通过字符串拼接来实现的。虽然C++的std::string类并不直接支持使用`+`和`-`运算符进行字符串的数学加减法操作,但我们可以通过重载运算符或者使用std::string类提供的方法来实现字符串的拼接和部分删除。 ### 字符串拼接 可以使用`+`运算符或者`std::string::append()`方法来拼接字符串。 ```cpp #include <iostream> #include <string> int main() { std::string str1 = "Hello, "; std::string str2 = "World!"; // 使用+运算符进行拼接 std::string result = str1 + str2; std::cout << result << std::endl; // 输出: Hello, World! // 使用append()方法进行拼接 result.append(" Welcome to C++!"); std::cout << result << std::endl; // 输出: Hello, World! Welcome to C++! return 0; } ``` ### 字符串部分删除 虽然字符串的"减法"操作并不是直接支持的,但可以通过`std::string::erase()`方法来删除字符串中的部分内容。 ```cpp #include <iostream> #include <string> int main() { std::string str = "Hello, World!"; // 删除从索引7开始的5个字符(即删除"World") str.erase(7, 5); std::cout << str << std::endl; // 输出: Hello, ! return 0; } ``` ### 字符串的数学加减法 如果需要进行字符串的数学加减法操作,可以将字符串转换为数值类型后再进行计算。 ```cpp #include <iostream> #include <string> #include <sstream> int main() { std::string str1 = "123"; std::string str2 = "456"; // 将字符串转换为整数 int num1 = std::stoi(str1); int num2 = std::stoi(str2); // 进行数学加法 int sum = num1 + num2; // 将结果转换回字符串 std::string result = std::to_string(sum); std::cout << result << std::endl; // 输出: 579 return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值