如何修改传参变量值并同时用其操作数组(C语言)
问题描述
原C代码如下:
#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的值并将其用于数组操作?
注:已参考相关帖子内容
解答
可以实现,但你主函数里的写法有误。主函数不需要把b定义成指针,保持原有的int b = 0即可,调用函数时传&b(即b的地址)给指针参数就行。
修改后的完整代码如下:
#include <stdio.h> void Func(int a[], int *b) { // 先用当前b的值操作数组 a[*b] = 1; // 再修改b的值 *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
核心逻辑:
- 数组操作
a[*b]取的是指针b指向的变量当前值(主函数里b的初始值0),给a[0]赋值1。 *b +=5直接修改主函数里b的内存值,所以主函数最后打印b会得到5。
你之前主函数里把b定义成int *b = 0是错误的,这会让b变成空指针,传&b给函数后,操作的是指针变量本身,完全偏离了修改整数变量的需求。
内容的提问来源于stack exchange,提问作者DilDeath
相关产品推荐
相关产品推荐

