c - 在C中保存一个指针地址

标签 c visual-studio pointers

我想保存一个指针的某个地址,以后用到。

这是保存原始指针的结构:

typedef struct CSV
{
    char *RD;
    ...
}CSV;

这是被调用的函数:

static status_t write_to_buffer(CSV *CSVUtil,...)
{

    // The way i was planning to save address:
    char* temp =  &CSVUtil->RD;

...
    // pointer location ++
    CSVUtil->RD++;
...
    // The way i wanted to restore it:
    &CSVUtil->RD = temp;
}

首先,我是否在根据需要进行地址恢复?

我收到此错误消息:expression must be a modifiable lvalue

所以我猜我不是,但我能做些什么来解决这个问题?

编辑:

明确一点,我想做的是将地址复制到某个指针,更改使用的地址(增加它),然后将复制的地址设置回使用的地址。

干杯。

最佳答案

这个分配不正确:

char* temp =  &CSVUtil->RD;

表达式 &CSVUtil->RD 返回一个指向字符指针的指针(即 char**),但您将其分配给字符指针 char *,因此缺少一级间接寻址。输出中应该有一个编译器警告,告诉您这个问题。

赋值 &CSVUtil->RD = temp 不起作用的原因是“获取地址 &”运算符的结果不可赋值。您可以获得一个地址,但不能通过“分配”一个新地址来更改它。

看起来您需要保存和恢复指针本身,而不是该指针的位置。因此,您可以通过删除与号来修复代码:

char* temp =  CSVUtil->RD;
...
CSVUtil->RD = temp;

关于c - 在C中保存一个指针地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24057306/

相关文章:

c - 错误: too many arguments to function

c - 原始 C 和 Fortran 类型的最终长度

c++ - 如何使用 Visual Studio 编译器使用 cgo 构建库?

c++ - 让 VC 对话框编辑器识别命名空间中的对话框类

c - 正在重新分配的指针未分配

c++ - 为什么函数 std::basic_streambuf::seth() 采用非常量参数

C 中的转换效果不佳

c - 与信号量的合并实现

c++ - Waf 生成 Visual Studio 项目?

c++ - 递归删除链表会导致堆栈溢出吗?