gpt4 book ai didi

在C中的特定地址构造数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:29 24 4
gpt4 key购买 nike

我想在特定地址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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com