我需要在变量中存储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]
似乎被截断了。
我在这里想念什么?
我很难理解为什么为什么初始化一个具有文字大小的数组(例如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上创建了两个片段,以演示这种行为。