使用指针分配值与正常分配值之间的区别?

时间:2019-05-20 21:10:00

标签: c pointers

这两者有什么区别?

x = x + 5

* y = * y + 5(其中* y指向x的地址)

据我所知,它们都具有相同的值,并且都更改了该内存地址中的内容-那么有什么实际区别吗?当需要额外获取数据时,为什么会在这种情况下使用指针?

2 个答案:

答案 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)

当代码的多个部分应共享并以相同的值操作时,通常使用指针,而对一个部分所做的更改将反映在另一部分。这与将值仅复制到不同部分相反,从而失去了与原始值的“联系”。

例如,要对一个共享值进行运算,您可以将指向整数值的指针传递给函数。然后,该函数可以通过取消引用指针来直接更改“原始”传递的值。相反,当将整数值“按值”传递给函数时,该函数将对副本进行操作,并且没有任何机会直接更改“原始”值。

前者或后者是正确的选择取决于您是否需要共享一个公共状态,或者您确实想解耦部分代码。