我想在特定地址addr
中创建一个整数数组array[3]
,并用{ 1, 3, 6 } 初始化数组
。我怎样才能做到这一点?
int addr = 0x40000;
((int *)addr)[3] = { 1, 3, 6 }; //Error
最佳答案
你不能在那个位置初始化一个数组,你甚至不能声明有一个数组。
但是,您可以使用指针来操作该位置已存在的值。
事实上,你已经很接近了:
int* addr = (int*)0x40000;
addr[0] = 1;
addr[1] = 3;
addr[2] = 6;
从技术上讲,这可能有未定义的行为,具体取决于此 0x40000
的来源:执行指针运算(包括通过像这样的数组下标)需要您在对象中导航或对象数组,它们必须由您的程序创建:如果您的整数是由其他进程创建的(可能,尽管存在虚拟内存,例如,如果您正在内存映射某些硬件寄存器)那么严格来说情况并非如此.但是,它基本上适用于所有硬件,是一种常用技术。
但是,如果 0x40000
当前不存在任何内容,而您正试图指定一个全新的 C 数组将被分配到哪里,那么,不,您不能那样做。
关于在C中的特定地址构造数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33741214/