【发布时间】:2019-06-02 16:46:14
【问题描述】:
昨天我遇到了我一直想要理解和纠正的有问题的代码。到目前为止,我已经做了一些研究并纠正了它,但我想知道是否有其他方法可以纠正代码?
# include < stdio .h >
# include < stdlib .h >
int * sub ( int * x , int * y) { //return type should be pointer but is address//
int result = y - x ; //integer becomes pointer//
return &result;
}
int main ( void ) {
int x = 1;
int y = 5;
int * result = sub (&x , &y ); //function has addresses as parameters but not pointers//
printf ("% d\n" , * result );
return EXIT_SUCCESS ;
}
我会简单地删除所有指针和地址:
# include < stdio .h >
# include < stdlib .h >
int sub ( int x , int y) {
int result = y - x ;
return result ;
}
int main ( void ) {
int x = 1;
int y = 5;
int result = sub (x , y );
printf ("% d\n" , result );
return EXIT_SUCCESS ;
}
【问题讨论】:
-
(a) 当您的编译器不想编译某些代码时,它会在错误消息中告诉您原因。如果您在理解某条消息时遇到困难,您应该在问题中包含它的确切文本。 (b)
< stdio .h >和< stdlib .h >是错误的,因为有空格。删除空格。 (c) 指针是地址,或者至少指针对象的值是内存中的地址。返回指针的函数返回地址(或NULL)。 (d) 返回result的地址是不合适的,因为result的存在(在C执行模型中)只为sub的执行而存在。 -
在您
return &result;的第一段代码中,您将返回一个指向位于堆栈中的局部变量的指针。这是一个非常糟糕的主意。
标签: c function pointers compilation