我想保存指针的某个地址,稍后再使用它。
这是保存原始指针的结构:
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
所以我猜我不是,但是我能做些什么来解决这个问题?
修改
为了清楚起见,我想要做的是将地址复制到某个指针,更改使用的地址(增加它),然后将复制的地址设置为使用的地址。
干杯。
答案 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类型。
现在让我们来看看你的作业:
如你所知,指针有一个地址,如果我有一个:
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的函数),所以它不能被改变。
我会将作业更改为:
这应该有效。
希望我的解释足够好。