我想在特定地址array[3]
中创建一个整数数组addr
,并使用{ 1, 3, 6 }
初始化该数组。我怎样才能做到这一点?
int addr = 0x40000;
((int *)addr)[3] = { 1, 3, 6 }; //Error
答案 0 :(得分:4)
您无法在该位置初始化数组,并且您甚至无法声明其中有一个数组。
但是,您可以使用指针来操纵该位置已存在的值。
事实上,你非常接近:
int* addr = (int*)0x40000;
addr[0] = 1;
addr[1] = 3;
addr[2] = 6;
从技术上讲,这可能有未定义的行为,具体取决于0x40000
来自何处:执行指针算术(包括通过这样的数组下标)要求您导航一个对象或数组必须由程序创建的对象:如果您的整数是由其他进程创建的(尽管可能是虚拟内存,例如,如果您对某些硬件寄存器进行内存映射),那么情况并非如此。但是,它基本上适用于所有硬件,并且是一种常用技术。
但是,如果0x40000
目前不存在任何内容,而您尝试指定全新C阵列的分配位置,那么不,您不能这样做。