c - 关于指针在 C 中如何工作的问题
问题描述
我正在为 C 中的类解决一个问题,我从未排序的数组中返回最大值,并且该值的索引存储在指针中index_ptr
。
这是我构建的代码:
int get_biggest_index(int array[], size_t array_size, int *index_ptr){
int max = array[0], index;
for (int i = 0; i < array_size-1; i++){
if (array[i+1] > max){
max = array[i];
index = i;
}
}
index_ptr = &index;
printf("idx: %d\n", *index_ptr); //purely for testing
return max;
}
我知道上面的工作是为了返回最高值,但在这种情况下运行它:
int main() {
int arr[5] = {4, 7, 3, 9, 5};
size_t arr_size = 5;
int *idx;
printf("biggest value in array arr => %d\n", get_biggest_index(arr, arr_size, idx));
printf("idx of biggest value => %d", *idx);
return 0;
}
输出是:
idx: 3
max value in array arr => 9
idx of max value => -98693133
有人可以具体解释一下为什么在指针的值方面会发生这种情况以及如何解决它吗?
我也很乐意听取有关其余代码的任何其他建议,因为我相信它会更好。
非常感谢你的帮助!
解决方案
该变量在函数内部index
是局部get_biggest_index
的。它的生命周期将在函数返回时结束,任何指向它的指针都将变为无效。
虽然这不是这里的问题,因为index_ptr
它也是一个局部变量,当函数返回时它的生命周期结束时,它的值将丢失。
问题是您误解了在 C 中模拟传递引用的工作原理。您不应该传递指针,并使其指向函数中的变量。相反,您应该&
在调用中使用指向运算符来传递指向现有变量的指针。然后在函数中取消引用指针来设置原始变量值。
像这样的东西:
int get_biggest_index(int array[], size_t array_size, int *index_ptr){
int index;
// ...
*index_ptr = index; // Set the *value*
// ...
}
并将其称为:
int idx; // Not a pointer
get_biggest_index(arr, arr_size, &idx); // Pass pointer to the idx variable
推荐阅读
- python-3.x - UnicodeDecodeError:在 python 中使用 .csv 时,'utf-8' 编解码器无法解码位置 4089 中的字节 0xa3
- matlab - OOP中的Matlab私有/嵌套函数
- php - 如何在我的 api 平台应用程序中使用外部资源
- exception - 重新抛出 RuntimeExceptions
- c# - 是否可以使用 Windows 服务或 Windows 侦听器将消息连接并接收到 IBM MQ
- ruby - 如何将浏览器控制台错误日志存储在报告文件中?
- algorithm - 我需要知道我应该为以下情况选择哪种算法
- python-2.7 - 在 pycrypto 中使用 32 字节的初始化向量
- javascript - Webpack更改css文件中的url
- python - 使用 OCR 从图像中提取某些文本