在C

时间:2015-11-16 17:29:19

标签: c

我想在特定地址array[3]中创建一个整数数组addr,并使用{ 1, 3, 6 }初始化该数组。我怎样才能做到这一点?

int addr = 0x40000;
((int *)addr)[3] = { 1, 3, 6 }; //Error

1 个答案:

答案 0 :(得分:4)

您无法在该位置初始化数组,并且您甚至无法声明其中有一个数组。

但是,您可以使用指针来操纵该位置已存在的值。

事实上,你非常接近:

int* addr = (int*)0x40000;
addr[0] = 1;
addr[1] = 3;
addr[2] = 6;

从技术上讲,这可能有未定义的行为,具体取决于0x40000来自何处:执行指针算术(包括通过这样的数组下标)要求您导航一个对象或数组必须由程序创建的对象:如果您的整数是由其他进程创建的(尽管可能是虚拟内存,例如,如果您对某些硬件寄存器进行内存映射),那么情况并非如此。但是,它基本上适用于所有硬件,并且是一种常用技术。

但是,如果0x40000目前不存在任何内容,而您尝试指定全新C阵列的分配位置,那么不,您不能这样做。