首页 > 解决方案 > 如何修改地址处的值

问题描述

这是关于 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我将如何修改WL. 我尝试的是:

* add_str2 = 'L';

0_main.c:46:5:错误:一元“*”的无效类型参数(具有“长无符号整数”)

这样做的正确方法是什么?有没有一种方法可以在没有指针类型的情况下修改内存地址的值,还是需要显式指针或强制转换的指针,例如* (char *) add_str2 = 'L';

标签: cpointers

解决方案


要修改内存地址的值,您需要 C 中的指针。

unsigned long add_str2不是指针,所以你不能这样使用它。

将数字转换为指针是一个雷区,因为几个系统对不同的整数和指针使用不同的大小。例如,我目前正在使用一个使用 6 字节宽度指针的目标系统。

不惜一切代价避免将数字转换为指针或返回。


推荐阅读