在C中保存指针地址

时间:2014-06-05 10:08:43

标签: 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

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

修改

为了清楚起见,我想要做的是将地址复制到某个指针,更改使用的地址(增加它),然后将复制的地址设置为使用的地址。

干杯。

2 个答案:

答案 0 :(得分:4)

此分配不正确:

char* temp =  &CSVUtil->RD;

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

分配回&CSVUtil->RD = temp不起作用的原因是"取地址&"运算符不可分配。您可以获得一个地址,但不能通过"分配"来改变它。这是一个新的地址。

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

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

答案 1 :(得分:2)

根据你的问题

  

表达式必须是可修改的左值

这意味着您正在尝试将值分配给const或Un-Changeable类型。

现在让我们来看看你的作业:

  1. char * temp =& CSVUtil-> RD;
  2. CSVUtil-> RD ++;
  3. & CSVUtil-> RD = temp;
  4. 如你所知,指针有一个地址,如果我有一个:

      

    char *指针

    指针变量将保存我想要的实际值所在的地址,并且要访问该值,我将使用* pointer = XXX或者如果它是结构指针 - &gt; inside-value = XXX。< / p>

    通过添加&#34;&amp;&#34;来尝试做什么在指针前面实际上是回放&#34;指针&#34;的位置。声明的变量。

    所以 - 不是获取RD指向的值的地址,而是获取RD本身的地址。 另外,这里是问题 - 变量的地址不能以这种方式改变,但是通过malloc,因为它是在编译或运行时决定的,如果它是动态的(malloc),所以在做&amp; Pointer = XXXX时你是实际上并没有改变变量,但试图改变它的地址。但&#34;&amp;&#34; operator只返回地址(想象它就像一个返回一个指定地址的int的函数),所以它不能被改变。

    我会将作业更改为:

    1. char * temp = CSVUtil-&gt; RD;
    2. 没问题;
    3. CSVUtil-&gt; RD = temp;
    4. 这应该有效。

      希望我的解释足够好。