这两者有什么区别?
x = x + 5
* y = * y + 5(其中* y指向x的地址)
据我所知,它们都具有相同的值,并且都更改了该内存地址中的内容-那么有什么实际区别吗?当需要额外获取数据时,为什么会在这种情况下使用指针?
答案 0 :(得分:2)
为什么在这样的情况下需要额外获取数据时会使用指针?
你不会的。
这是一个如何使用指针做一些有用的小例子。假设您要编写一个函数,将参数加1。没有指针就无法完成。看起来可能像这样:
void inc(int *x) {
*x = *x + 1;
}
现在,我们可以像这样使用此功能:
int main() {
int a = 5;
printf("Value before: %d\n", a);
inc(&a); // The & is to send the address of the variable
printf("Value after: %d\n", a);
}
该程序将打印以下内容:
Value before: 5
Value after: 6
答案 1 :(得分:0)
当代码的多个部分应共享并以相同的值操作时,通常使用指针,而对一个部分所做的更改将反映在另一部分。这与将值仅复制到不同部分相反,从而失去了与原始值的“联系”。
例如,要对一个共享值进行运算,您可以将指向整数值的指针传递给函数。然后,该函数可以通过取消引用指针来直接更改“原始”传递的值。相反,当将整数值“按值”传递给函数时,该函数将对副本进行操作,并且没有任何机会直接更改“原始”值。
前者或后者是正确的选择取决于您是否需要共享一个公共状态,或者您确实想解耦部分代码。