将指针向前移动一个字节。

3
我想将指针向前移动一个字节。 但是我收到了这个错误:
lvalue required as increment operand

使用以下代码:

int **test = 0;
((char *) *test)++;

但是这样也可以:

int **test = 0;
char **t2 = (char **) test;
(*t2)++;

我该如何更简洁地完成后者?

3个回答

3
如果您想增加双指针指向的值:
(* (char **) test)++;

这意味着对名为“test”的双重指针进行解引用,然后增加它当前指向的值。
这将增加指针所指向的值,而不是推进指针本身。 我认为这就是您在示例代码中尝试做的事情。

2

尝试使用

(*(char **)test)++;

我尝试了一下,它似乎可以工作。那么为什么需要先将其转换为双指针呢? - donkon
1
简单解释:你不能执行 5++;,或者 (1+2)++;,或者 calculate_pi()++;。你只能对一个变量进行增量操作 (variable++;),或者对一个地址的值进行增量操作 ((*something)++;),或者对一个结构体中的字段进行增量操作。这个结构体可以是上述任何一种情况 (structure_variable.field++; 或者 (*pointer_to_structure).field++; 或者 pointer_to_structure->field++;)。做任何其他操作都是无效的。 - user253751
因此,就拿你的例子来说:(*something)++; 这意味着解除引用是可以的,但是解除引用然后转换类型再进行增量操作是不可以的? - donkon

0

与被接受的答案相反,我认为唯一的方法是:

int **test = 0;
test = (int **)((char *)test + 1);

带有解引用符*的任何表达式,例如(*(char **)test)++,尽管可能会编译通过,但通常会导致分段错误,因为它正在访问内存位置0


如果在写入之前访问它,这是真的吗? - donkon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接