我想将指针向前移动一个字节。 但我得到这个错误:将指针移动一个字节
lvalue required as increment operand
有了这个代码:
int **test = 0;
((char *) *test)++;
但它是罚款与此:
int **test = 0;
char **t2 = (char **) test;
(*t2)++;
我该怎么做后者简洁?
我想将指针向前移动一个字节。 但我得到这个错误:将指针移动一个字节
lvalue required as increment operand
有了这个代码:
int **test = 0;
((char *) *test)++;
但它是罚款与此:
int **test = 0;
char **t2 = (char **) test;
(*t2)++;
我该怎么做后者简洁?
尝试使用
(*(char **)test)++;
我试过了,它似乎工作。那么为什么需要首先投射到双指针呢? – donkon
简单解释:您不能执行'5 ++;'或'(1 + 2)++;'或'calculate_pi()++;'。你只能增加一个变量('variable ++;')或者一个地址的值('(* something)++;')或者一个结构体的结构体的结构体('structure_variable.field ++;'或者'(* pointer_to_structure).field ++;'或'pointer_to_structure-> field ++;'。其他操作无效 – immibis
所以,用你的例子:'(* something)++;'这意味着解引用是可以的,但是解引用和然后铸造然后递增不是? – donkon
如果你想增加值由双指针指向:
(* (char **) test)++;
这意味着去refrence的双指针名为“test”,然后递增它当前指向的值。
这将增加指针指向的值,而不是提前指针本身。 这就是我认为你正在试图在你的示例代码中做的事情。
相反,接受的答案,我认为要做到这一点的唯一方法是:
int **test = 0;
test = (int **)((char *)test + 1);
与间接引用*
任何表达式,如(*(char **)test)++
,虽然它可能编译通常会给出一个分段错误,因为它正在访问内存位置0
。
如果我在写入之前访问它,这是真的吗? – donkon
可能重复的[如何使指针增加1个字节,而不是1个单元](http://stackoverflow.com/questions/16578054/how-to-make-a-pointer-increment-by-1-字节不是1单位) – Tacet