问题描述
这是一个有关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:错误:一元“ *”的类型参数无效(具有“ long unsigned int”)
正确的方法是什么?并且有没有办法在没有指针类型的情况下修改内存地址的值,还是需要显式指针还是强制转换的指针,例如* (char *) add_str2 = 'L';
?
解决方法
要修改内存地址中的值,您需要使用C语言的指针。
unsigned long add_str2
不是指针,因此不能这样使用。
将数字投射到指针是一个雷区,因为一些系统对不同的整数和指针使用不同的大小。例如,我目前正在使用使用6个字节宽度的指针的目标系统。
不惜一切代价避免将数字转换为指针或指针。