我想知道是否有一种方法可以通过在 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
您需要执行以下操作,假设p
指向您有权写入的有效内存:
int **p = something;
p[1] = NULL;
p[1] = q;
int *p, *q;
*(unsigned int *)(p + 1) = (intptr_t)NULL;
// or
*(unsigned int *)(p + 1) = (intptr_t)q;
这似乎对我有用。
我不太清楚你在问什么。您可以设置指向 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 的别名。