C:指针算术的评估:操作何时完成?

标签 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。 谁能给我解释一下这段代码中的*、&、什么指针是进行操作的原因吗?

最佳答案

一般来说,这与指针运算无关。这是关于正确调用函数的问题,即何时使用指针,何时使用整数。

由于您想要更改 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);

关于C:指针算术的评估:操作何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51484436/

相关文章:

javascript - 想要将 6 个圆圈放置在数学上精确的几何形状中,但它们没有正确对齐

algorithm - 是否可以从 Excel 中的多行中获取平均值?

javascript - 更改圆上的放置顺序

c - 如何使用指针交换数组

c++ - 带链接列表的哈希表中的前 10 个频率

visual-studio - Visual Studio 调试器输出 - 输出相同但格式不同(如一个项目中的十进制输出,另一个项目中的十六进制输出)

使用指针更改结构内的数据

c++ - 为什么 NMake 生成器将 C 文件的 .obj 文件放在 C++ 目录以外的目录中

php - PHP uniqid()源码相关问题

c - 日志记录:独立应用程序的系统日志?