使用->;C中返回语句中的运算符

使用->;C中返回语句中的运算符,c,function,return,C,Function,Return,我正在学习C语言,我遇到的一个问题,我不能完全理解。问题是如果使用->操作符返回,会出现什么问题。因此,如果代码最初是这样做的: myVariable = foo->bar; return myVariable; 然后如果改成这样: return foo->bar; 会出什么问题?看起来这样应该还可以,所以我不确定为什么会出现问题。您正在从单一使用变量转换为直接返回该变量。这是允许的,在这种情况下更可取,因为它避免了为myVariable声明错误类型时可能出现的任何错误 在返回的

我正在学习C语言,我遇到的一个问题,我不能完全理解。问题是如果使用->操作符返回,会出现什么问题。因此,如果代码最初是这样做的:

myVariable = foo->bar;
return myVariable;
然后如果改成这样:

return foo->bar;

会出什么问题?看起来这样应该还可以,所以我不确定为什么会出现问题。

您正在从单一使用变量转换为直接返回该变量。这是允许的,在这种情况下更可取,因为它避免了为
myVariable
声明错误类型时可能出现的任何错误

返回的上下文中,
->
没有什么特别之处。您可以返回任何表达式,像
->
这样的内容可以是表达式的一部分

如果您感到好奇,您可以阅读以下内容:

return [ expr ] ';'

这意味着如果
foo->bar
是一个有效的表达式,如中所示,这是一个可编译的代码位,那么
返回foo->bar也是有效的。您的代码暗示
foo
是指向某个属性为
bar
的对象的指针。如果不是这样,则两个版本都不起作用。它还取决于与该属性类型匹配的函数返回类型。

请发布实际代码(最多20行即可)。从您发布的代码片段很难说。请编辑您的帖子以包含此问题的实际文本?在任何一种情况下,如果变量
foo
为空,代码将崩溃。最好在取消引用之前检查foo是否为NULL。如果它为NULL,您将返回一些特殊值。如果myVariable仅用作仅返回的临时变量,则可能会对其进行优化,以使两个实现向下编译到同一个程序集。