#include <stdio.h>
void fun(int a,int b,int c){
int *ret;
ret = &a -1;
(*ret)+=8;
}
int main(){
int x;
x = 0;
fun(1,2,3);
x = 1;
printf("x is %d\n",x );
return 0;
}
我相信 x 应该是 1,但它实际上是 0。这是什么原因造成的?
您正在调用一些非常未定义的行为。a
函数中的变量位于通常只能由函数访问的地址(可能在堆栈上)。减少该地址会导致未定义的位置。你根本不知道那里有什么,所以你不知道将它增加 8 会做什么。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句