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。 谁能向我解释在此代码中什么*,&和什么指针,这是进行操作的原因?
答案 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);