c - 如何修改地址处的值
问题描述
这是关于 C 中的指针和取消引用的一个非常基本的问题,但这里有。我有以下内容:
char str2[] = "Word2";
printf("String2: %s | Location: %p\n", str2, str2);
unsigned long add_str2 = (long) &str2;
printf("Address of str2 starts at: 0x%lx\n", add_str2);
在此之后,我可以确认add_str2
具有正确的内存地址:
String2: Word2 | Location: 0x7ffc623b8102 Address of str2 starts at: 0x7ffc623b8102
使用add_str2
我将如何修改W
为L
. 我尝试的是:
* add_str2 = 'L';
0_main.c:46:5:错误:一元“*”的无效类型参数(具有“长无符号整数”)
这样做的正确方法是什么?有没有一种方法可以在没有指针类型的情况下修改内存地址的值,还是需要显式指针或强制转换的指针,例如* (char *) add_str2 = 'L';
?
解决方案
要修改内存地址的值,您需要 C 中的指针。
unsigned long add_str2
不是指针,所以你不能这样使用它。
将数字转换为指针是一个雷区,因为几个系统对不同的整数和指针使用不同的大小。例如,我目前正在使用一个使用 6 字节宽度指针的目标系统。
不惜一切代价避免将数字转换为指针或返回。
推荐阅读
- python - 如何使用 python SDK 删除 Minio 存储中的路径?
- c - 使用 fork() 创建新进程时写时复制优化的优点
- python - 长时间运行的 Jupyter 笔记本/实验室?
- javascript - 代码给出无法找到未定义长度的错误
- sql-server - 从 SQL Server 创建 XML
- versioning - pr 在版本中是什么意思?
- elixir - `quote do: unquote({:a, :b, :c})` 的结果
- azure-data-factory - 表名循环 ADFv2
- angular - @google-cloud/logging 可以在 Ionic4/Angular8/Firebase 客户端应用程序中使用吗?如何修复模块导入错误
- php - 时间戳或根据时区更改时间