C:指针算术评估:什么时候完成操作?

时间:2018-07-23 17:39:21

标签: c pointers math

void add( int a, int b) {
   a += b;
  }
 void sub( int *a, int* b) {
  *a -= *b; }
 void mul( int a, int *b) {
    a *= *b;
  }
  void div( int *a, int b) {
    *a /= b; }
  int a = 2, b = 3;
  sub( &a, &a );
  add(  a,  b );
  div( &a,  b );
  mul(  b, &a );
  div( &b,  b );
  add(  b,  a );
  printf( "%d\n", a ); 
  printf( "%d\n", b ); 

为什么不是a = 1和b = 2,而是a = 0和b = 1。 谁能向我解释在此代码中什么*,&和什么指针,这是进行操作的原因?

1 个答案:

答案 0 :(得分:1)

通常,这与指针算法无关。这与正确调用该函数有关,即何时使用指针以及何时使用整数。

由于您要更改a并保留b不变,因此所有函数的形式应为:

void function(int* const a, const int b) {…}

由于a是作为指针传递的,因此可以使用语法a来更改*a = …的值。由于指针是const,因此指针本身无法更改。由于b永远不会更改,因此最好将其作为const传递。

如果您以这种方式更改所有功能,请相应地更正功能主体以及调用函数的方式,

示例

void add( int* const a, const int b) {
   *a += b;
}


int a = 0;

add(&a, 42);