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

标签 c

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

相关文章:

c - 使用函数初始化结构

c - 在C中读取空白行

c - 如何使用堆栈反转字符串?

c - c 中的 mpi 中未发生消息传递

c - 用 C 编写一个安全的标记 union

c - 如何生成所有不同的数字,这些数字可以通过从每个数字的左端和/或右端消除一个或多个数字来形成

c - 编写C语言函数

c - 多维数组越界访问

c - recv() 中使用的字符串不像它应该的那样 printf

php - 学习PHP之前必须先学习C/C++吗?