如何向不可修改的函数传递char指针以获取新计算的char值?
解决无法修改函数时的char指针传参问题
老哥我太懂你这种折腾半天卡壳的感觉了!对着char指针传参摸不着头脑,还碰上个死活不能改的函数,确实够闹心的。其实你朋友说的用char数组的思路完全可行,我给你掰扯清楚怎么操作:
首先得搞明白为啥直接传普通char指针不行——如果你传的是一个指向单个char变量的指针副本,函数里要是只改指针本身的地址,那外部根本看不到变化;但如果函数是修改指针指向的内存内容,那咱们只要让这个指针指向一块外部能访问到的内存就行,数组就是最方便的选择。
举个实际的代码例子,先模拟那个你不能修改的函数:
// 假设这就是你没法修改的函数,它会给传入的char*指向的内存赋值 void generate_new_char(char* ptr) { // 这里模拟生成新字符的逻辑,比如设为'B' *ptr = 'B'; }
然后咱们在主函数里这么用:
#include <stdio.h> int main() { // 定义一个char数组,哪怕只开一个元素的空间都够用 char output_char[1]; // 把数组名传给函数——数组名会自动退化为指向数组首元素的char* generate_new_char(output_char); // 现在数组的第一个元素就是函数生成的新值啦 printf("函数生成的字符是:%c\n", output_char[0]); return 0; }
为啥这招管用?因为你传给函数的是数组首元素的内存地址,函数里修改*ptr其实就是直接修改数组里的内容,而数组是在主函数的栈上分配的,外部自然能读取到修改后的结果。
其实除了数组,你也可以直接传单个char变量的地址,效果是一样的:
char single_char; generate_new_char(&single_char); printf("生成的字符:%c\n", single_char);
核心逻辑都是一样的:让你传递的char*指向一块可被函数写入、且外部能访问的内存空间,这样函数修改的是内存里的实际值,而不是指针本身,就能拿到你想要的结果啦!
内容的提问来源于stack exchange,提问作者JC203
相关产品推荐
相关产品推荐

