-1

我想知道是否有一种方法可以通过在 C 中使用指针算法将 NULL 值或地址存储在相对于指针的地址处。

int *p;
p = NULL;  // is possible

int *p, *q;
p + 1 = NULL;  // ERROR: lvalue required as left operand of assignment
p + 1 = q;     // ERROR: lvalue required as left operand of assignment
4

3 回答 3

3

您需要执行以下操作,假设p指向您有权写入的有效内存:

int **p = something;
p[1] = NULL;
p[1] = q;
于 2013-11-10T03:54:22.607 回答
0
int *p, *q;

*(unsigned int *)(p + 1) =  (intptr_t)NULL;
// or
*(unsigned int *)(p + 1) =  (intptr_t)q;

这似乎对我有用。

于 2013-11-10T05:03:15.473 回答
0

我不太清楚你在问什么。您可以设置指向 NULL 值的指针,也可以指向 NULL 值。您不能将指针设置为 NULL,然后尝试将其用作值的目标。这是一个使用指针算法的例子

 int *p = (int*) malloc(3 * sizeof(int));
 *p = 0; // dereference p and set it's value to 0
 *(p + 1) = 1; // add 1 sizeof(int) to p and set it's value to 1

NULL 只是 0 的别名。

于 2013-11-10T04:01:53.120 回答