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/