指针算术,意外结果

  • 本文关键字:意外 结果 指针 c
  • 更新时间 :
  • 英文 :


下面是一个示例代码:

int* arr = (int*)malloc(2 * sizeof(int));
arr = arr + 1;
*arr = 11;
arr[-1] = 22;
int x = arr[0]; // x = 11
int y = arr[1]; // y = 194759710

后内存分配arr指针是递增的。我期望得到以下结果:

x == 22
y == 11

你能解释一下它的工作原理吗?

设置xy时,您忘记了arr不再指向已分配的内存。

这段代码做你想做的:

#include <stdio.h>
#include <stdlib.h>
int main(void) {
int* arr = (int*)malloc(2 * sizeof(int));
int *original = arr;
arr = arr + 1;
*arr = 11;
arr[-1] = 22;
int x = original [0]; // x = arr[-1]
int y = original [1]; // y = arr[0]
printf("%d, %dn", x, y);
}

y分配不正确。你只有2个已分配的元素,所以你不能先将指针增加1,然后用[1]取消对指针的引用,因为这会给出不存在的第三个元素。