这是我的示例代码:
#include <stdio.h>
void Func(int a[], int b) {
a[b] = 1;
b += 5;
}
int main(void) {
int a[10];
int b = 0;
printf("%d\n", b);
Func(a, b);
printf("%d\n", a[0]);
printf("%d\n", b);
}
我想让程序打印出来:
0
1
5
我试着通过将b
设为指针来改变函数:
void Func(int a[], int *b)
然后写*b += 5
。另外,我将函数的调用改为:
int a[10];
int *b = 0;
// ...
Func(a, &b);
是否可以操作b
并使用它?
- 注意:我已经试过关注this post*
2条答案
按热度按时间hlswsv351#
这段代码的问题是
Func
正在分配b
的本地副本,这在函数之外没有任何影响。要获得预期的输出,请执行以下操作:
Func
仍然有一个名为b
的本地副本,但这个副本是一个指针,可以指向main
中的b
对象。这允许我们用*b += 5
修改指向的对象。twh00eeo2#
为此,您希望使用
a
和b
作为指针,因为a
是一个数组,而b
您希望修改函数内部的值。但是你不能在函数内部直接发送
b
,这就是为什么你要发送&b
来给予变量的存储地址,这样你就不会复制b
的值,而是直接改变它。