指针使用问题求助:双函数数组处理中指针疑似出错
指针使用问题的解决方案
嘿,我看你在指针的使用上卡壳了,咱们来把这个问题掰明白~
首先,你的核心问题是:调用calculator函数时,你传递的是first_num、second_num这些变量的「值」,而不是它们的内存地址。这就导致calculator里对这几个变量的修改根本没法传递回chooser函数里——值传递相当于给函数递了个变量的副本,函数改副本不影响原变量。而指针的作用就是让函数能直接操作原变量的内存空间。
具体修改步骤
1. 调整calculator的函数参数为指针类型
要让calculator能修改chooser里的三个变量,得把参数改成int*(整数指针),这样函数就能接收变量的地址,进而修改原变量:
// 示例:calculator函数的定义,可替换为你自己的逻辑 void calculator(int arr[], int *first_idx, int *second_idx, int *third_idx) { // 假设逻辑是选择数组中第2、5、8个元素(下标从0开始) *first_idx = 1; *second_idx = 4; *third_idx = 7; }
这里的*first_idx是解引用操作,意思是“访问指针指向的内存地址里的内容”,通过它就能直接修改chooser里的first_num变量。
2. 修改chooser里的函数调用方式
调用calculator时,要用&(取地址运算符)把first_num、second_num、third_num的内存地址传进去:
void chooser() { int cool_array[10] = {0}; // 用0初始化比'\0'更合适,因为是int数组 int i = 0; while(i < 10) { scanf("%d", &cool_array[i]); i++; } int first_num = 0; int second_num = 0; int third_num = 0; // 传变量的地址,而非变量的值 calculator(cool_array, &first_num, &second_num, &third_num); // 用得到的下标打印数组元素 printf("选中的三个数字:%d, %d, %d\n", cool_array[first_num], cool_array[second_num], cool_array[third_num]); }
另外提一句:数组名cool_array本身就是指向数组第一个元素的指针,所以直接传它是对的,不用加&。
指针使用的关键提醒
- 当需要函数修改外部变量时,必须传递变量的地址(用指针参数),值传递只能传递副本,无法修改原变量。
- 解引用指针时,一定要确保指针指向的是有效的内存地址(比如不要用未初始化的指针),否则会触发野指针错误。
内容的提问来源于stack exchange,提问作者Zoey Malkov
相关产品推荐
相关产品推荐

