添加到指针时出现意外结果

AK_*_*AK_ 6 c undefined-behavior

有人告诉我这段代码打印出29.为什么会这样?

int *a = 17; 
printf("%d", a+3);
Run Code Online (Sandbox Code Playgroud)

Aar*_*ron 36

因为当您添加到指针时,它会添加对象大小.在这种情况下,对象大小为4(sizeof(int)== 4) - 所以17 + 3*4 == 29.

  • 实际上,这是正确的.你将字面值"17"分配给指针 - 所以它指向内存地址17.添加4个整数后,它指向内存地址29.然后,当你要求打印出指针的值时(如反对它指出的价值),它将打印29. (6认同)

Ric*_*ton 13

每个人都知道答案是23,至少在6809.

a+3 == a + (3 * sizeof(int)) == a + 6 == 17 + 6 == 23
Run Code Online (Sandbox Code Playgroud)


JSB*_*ոգչ 11

a+3 == a + (3 * sizeof(int)) == a + 12 == 17 + 12 == 29
Run Code Online (Sandbox Code Playgroud)