【问题标题】:Move pointer one byte将指针移动一个字节
【发布时间】:2014-02-28 03:52:04
【问题描述】:

我想将指针向前移动一个字节。 但我得到这个错误:

lvalue required as increment operand

使用此代码:

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

不过这样就好了:

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

如何简洁地做到后者?

【问题讨论】:

标签: c pointers pointer-arithmetic


【解决方案1】:

尝试使用

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

【讨论】:

  • 我试过了,它似乎有效。那么为什么要先转换成双指针呢?
  • 简单解释:不能5++;,或(1+2)++;,或calculate_pi()++;。你只能增加一个变量(variable++;),或者一个地址((*something)++;)的值,或者是上述结构之一的一个字段(structure_variable.field++;(*pointer_to_structure).field++;pointer_to_structure->field++;。做任何事情否则无效。
  • 那么,以您的示例为例:(*something)++; 这意味着取消引用是可以的,但是取消引用然后强制转换然后递增不是?
【解决方案2】:

如果要增加双指针指向的值:

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

这意味着取消引用名为“test”的双指针,然后增加它当前指向的值。

这也会增加指针指向的值,而不是推进指针本身。 这就是我认为您在示例代码中尝试做的事情。

【讨论】:

    【解决方案3】:

    与公认的答案相反,我认为这样做的唯一方法是:

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

    任何带有取消引用* 的表达式,例如(*(char **)test)++,虽然它可以编译,但通常会出现分段错误,因为它正在访问内存位置0

    【讨论】:

    • 如果我在写入之前访问它,这是真的吗?
    猜你喜欢
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多