使用指针

书中的C程序:

#include  int *addition ( int a , int b) { int c = a + b; int *d = &c; printf("%d %d, ",c, &c); printf("%d %d, ",d, *d); return d ; } int main (void) { int result = *(addition(1,2)); int *result_ptr = addition(1,2); //// printf("result_ptr = %d\n" , *result_ptr ) ; printf("result = %d\n" ,result) ; return 0 ; } 

当我换掉最后两行时,程序变得越来越糟糕。

题。 addition()应该返回一个指针?

我通过将*result_ptr更改为*result_ptr来修复它。 并且addition()不是指针,但为什么?

您正在返回指向局部变量c的指针。 此变量在堆栈上分配,这意味着在addition函数返回后它无效。

addition应该只返回一个整数,这里不需要指针。

您有未定义的行为,因为您返回指向局部变量的指针。 当函数返回时,该指针不再有效。