技术文摘
函数中修改指针变量值后,为何函数外部无法获取修改后的值
2025-01-14 18:04:11 小编
函数中修改指针变量值后,为何函数外部无法获取修改后的值
在编程过程中,经常会遇到在函数内部修改指针变量的值,但在函数外部却无法获取到这些修改的情况,这让不少开发者感到困惑。下面我们就来深入剖析这一现象背后的原理。
首先要明确指针的概念,指针是一个变量,其值为另一个变量的地址。当我们将指针作为参数传递给函数时,实际上传递的是指针所指向的地址的副本。这意味着函数内部对指针变量本身进行修改时,修改的只是这个副本,而不是原始指针变量。
以 C 语言为例,看下面这段代码:
#include <stdio.h>
void modifyPointer(int *ptr) {
int newNum = 10;
ptr = &newNum;
}
int main() {
int num = 5;
int *ptr = #
modifyPointer(ptr);
printf("%d\n", *ptr);
return 0;
}
在这个代码中,modifyPointer 函数尝试修改传入的指针 ptr,使其指向一个新的变量 newNum。然而,运行 main 函数后,输出的仍然是 5。这是因为在 modifyPointer 函数中,修改的 ptr 只是主函数中 ptr 的一个副本,主函数中的 ptr 并没有受到影响,依然指向原来的 num。
如果希望在函数外部获取到修改后的值,有几种解决方法。一种是通过返回值,让函数返回修改后的指针:
#include <stdio.h>
int *modifyPointer() {
int newNum = 10;
return &newNum;
}
int main() {
int *ptr = modifyPointer();
printf("%d\n", *ptr);
return 0;
}
另一种方法是使用双重指针,将指针的地址传递给函数:
#include <stdio.h>
void modifyPointer(int **ptr) {
int newNum = 10;
*ptr = &newNum;
}
int main() {
int num = 5;
int *ptr = #
modifyPointer(&ptr);
printf("%d\n", *ptr);
return 0;
}
理解函数参数传递机制以及指针的本质是解决此类问题的关键。只有掌握了这些知识,才能在编程中灵活运用指针,避免因指针使用不当而导致的错误,提高程序的稳定性和可靠性。
- 阿里达摩院员工业余构建“论文知识图谱”:实现极速搜索与完全可视化
- 2020 年十大数据分析与 BI 平台及工具
- LFU 的五种实现途径:由简至繁
- 3 年开发中的 CSS 问题与解决方案已被大佬总结
- 6 种助少数开发人员脱颖而出的编程习惯
- 动静分离架构究竟为何?
- 18 行 JavaScript 打造倒数计时器
- Redis 单线程何以实现百万+QPS ?
- 如何优化 Go 服务降低 40%的 CPU 使用率
- YOLOv4 何以成为当前大热?小细节全解析
- 各大编程语言竟摆起地摊,惨不忍睹
- 三年开发中的 CSS 问题及解决方案已被大佬总结
- 多种方式采集 Nginx 日志:filebeat、logstash、rsyslog 的超强干货
- 又一线上事故,线程池不可乱用!
- 三本女生从外包测试到阿里巴巴的逆袭之旅