如何在地址上修改值

问题描述

这是一个有关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_str2W修改L。我尝试过的是:

* add_str2 = 'L';

0_main.c:46:5:错误:一元“ *”的类型参数无效(具有“ long unsigned int”)

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

解决方法

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

unsigned long add_str2不是指针,因此不能这样使用。

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

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