使用指针
书中的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
应该只返回一个整数,这里不需要指针。
您有未定义的行为,因为您返回指向局部变量的指针。 当函数返回时,该指针不再有效。