小编fou*_*_29的帖子

如何在变量中存储64位内存地址?

我需要在变量中存储64位内存地址,a long应该足够大以容纳该值。

例如:

long arr[2];

//store the memory address of arr[1] in arr[0]
arr[0] = (long)(arr + 1);

printf("arr[0]: 0x%012x Actual address: %p\n", arr[0], (void *)arr);
Run Code Online (Sandbox Code Playgroud)

输出:

arr[0]: 0x00007c6a2c20, Actual address: 0x7ffe7c6a2c20
Run Code Online (Sandbox Code Playgroud)

存储在中的值arr[0]似乎被截断了。

我在这里想念什么?

c pointers

3
推荐指数
1
解决办法
82
查看次数

为什么arr [3]与arr [SOME_CONST]的行为不同,其中SOME_CONST = 3?

我很难理解为什么为什么初始化一个具有文字大小的数组(例如int arr[3];)会产生与初始化为常量大小(如int arr[SOME_CONST];设置为3)的数组不同的行为。

当将数组的大小作为文字提供时,其行为与预期的一样:

int arr[3];

//initialize the first two elements of the array, leave the third element uninitialized.
arr[0] = 1;
arr[1] = 2;


//print all elements of array
printf("arr[0]: %d\n", arr[0]);
printf("arr[1]: %d\n", arr[1]);
printf("arr[2]: %d\n", arr[2]);
Run Code Online (Sandbox Code Playgroud)

输出:

arr[0]: 1
arr[1]: 2
arr[2]: 0
Run Code Online (Sandbox Code Playgroud)

正如你可以在输出中看到未初始化的元素的值arr[2]0一样的预期。

当数组大小定义为常量时,行为变得异常,如下所示:

arr[0]: 1
arr[1]: 2
arr[2]: 0
Run Code Online (Sandbox Code Playgroud)

输出:

arr[0]: 1
arr[1]: 2
arr[2]: 32766
Run Code Online (Sandbox Code Playgroud)

现在,未初始化的元素arr[2]的看似随机值为32766

有人可以帮我理解为什么这两种情况表现不同。

我在ideone上创建了两个片段,以演示这种行为。

预期

意外

c

0
推荐指数
1
解决办法
80
查看次数

标签 统计

c ×2

pointers ×1