【发布时间】:2010-11-30 16:57:22
【问题描述】:
这段代码正确吗?它按预期运行,但是这段代码是否正确使用了结构的指针和点表示法?
struct someStruct {
unsigned int total;
};
int test(struct someStruct* state) {
state->total = 4;
}
int main () {
struct someStruct s;
s.total = 5;
test(&s);
printf("\ns.total = %d\n", s.total);
}
【问题讨论】:
-
为什么 test 应该返回一个 int ?实际上那里没有回报。
-
C 有引用吗?惊讶...
-
@honk:不是 C++ 意义上的,而是在 C++ 发明之前,指针是一种“引用”(因为它们有一个“引用对象”)。现在他们有一个“指针”或一些这样的废话。由于
someStruct具有值语义,因此“按引用传递”(C 在 C++ 术语中不这样做)与“按值传递引用”完全相同(它确实是有问题的“引用”是一个指针)。 -
c++ 引用(用 & 符号声明)的优势在于:1) 使用 c++ 引用编写错误的可能性较小,2) 使用 c++ 引用编写的代码更有可能启用编译器进行别名优化。由于在 fortran 中不可能使用别名,因此 c 中未优化的指针例程可能会导致尴尬。