0

书籍中的C程序:

#include <stdio.h>

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 ;
}

当我交换最后两行时,程序变得有问题。

问题。add() 是否应该返回一个指针?

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

4

2 回答 2

4

您正在返回一个指向局部变量的指针caddition这个变量是在栈上分配的,也就是说函数返回后它是无效的。

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

于 2013-09-02T12:58:57.650 回答
4

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

于 2013-09-02T12:59:04.870 回答