小编Alf*_*ang的帖子

函数调用后返回的指针值意外更改

这是C语言课程中的一道题。有人想从带有指针的函数返回一个值。他将指针地址分配给 result_ptr 并打印该指针的值。

当没有 A 行时,printf() 工作正常:printf() 打印 3。

然而,当在 printf() 之前调用另一个addition() 函数时,会发生错误:printf() 打印 5。

如果 A 行被注释掉,而 B 行(另一个 printf() 函数)被取消注释:printf() 将打印 0。

究竟发生了什么?

int *addition(int a, int b) {
    int d = a + b;
    int *c = &d;
    return c;
}

int main(int argc, const char * argv[])
{
    int *result_ptr = addition(1, 2);
    addition(2, 3); // Line A
//      printf("Another line\n"); // Line B
    printf("result = %d \n", *result_ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c pointers

2
推荐指数
1
解决办法
7166
查看次数

标签 统计

c ×1

pointers ×1