一直在唠叨我的好奇心:
考虑这个功能:
void add10(int& x) {
x += 10;
}
我已经在C中编程了很长时间,所以我确切地知道这样做意味着什么:
void add10(int *x) {
(*x)+=10;
}
x的地址被压入堆栈(连同返回地址,动态链接等),函数本身会取消引用它。
但是第一种情况下如何使用调用堆栈?它只是第二种情况的句法快捷方式吗?
答案 0 :(得分:2)
没有通用的答案,因为它取决于编译器 - 它可以做任何想做的事情,只要结果是正确的。
通常,它将被视为与指针相同的方式。此外,通常情况下,它将被内联,因此堆栈中没有任何内容(但同样,它取决于编译器和上下文)
答案 1 :(得分:0)
它只是第二种情况的句法快捷方式吗?
这是实施定义。
通常是,因为引用在内部实现为指针。
PS:您对第二案例如何运作的说法远非准确。你需要重新接近它。