You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何通过void指针修改原字符串变量的指向?

问题分析与解决方案

你的代码输出"old"是因为options[0].value存储的是原value指针的副本,修改这个副本的指向只会改变结构体成员自身的值,不会影响原value变量的指向。

要实现通过结构体里的指针修改原变量的指向,你需要存储原指针的地址(即指针的指针),而不是指针本身。具体步骤如下:

  1. 将结构体的成员类型从void*改为void**,用来保存原指针的地址
  2. 初始化结构体时传入&value(原指针的地址)
  3. 修改时通过解引用这个二级指针,改变原指针的指向

修改后的代码示例:

#include <stdio.h>

char *value = "old";

struct ConfigOpt {
    void **value;  // 改为二级指针
};

struct ConfigOpt options[] = {
    {&value}  // 传入原指针的地址
};

// 通过解引用二级指针,修改原变量的指向
*(char**)options[0].value = "new";

printf("%s", value);  // 现在会输出"new"

说明

  • 这里用(char**)做强制类型转换是因为void**需要转为对应类型的指针才能正确解引用,确保类型匹配
  • 这种方式不需要预分配字符串,直接使用字符串字面量的指针即可实现需求

内容的提问来源于stack exchange,提问作者expoodo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:02:03