C - 你能在没有指针的情况下实现指针功能吗?

C - Can You Achieve Pointer Functionality Without Pointers?

我基本上很好奇你是否可以在不使用指针的情况下做这样的事情:

int myVariable = 0;

int varPointer = &myVariable;

*varPointer += 1; //This obviously won't work, but explains the concept

是的,我知道你可以用指针来做到这一点。我想知道是否可以在没有指针的情况下完成。

编辑>

我希望能够在没有指针的情况下引用包含在变量中的地址。

问题基本上是,"Can you achieve pointer functionality without using actual pointers? If so, how?"

#include <stdio.h>
#include <stdint.h>

int main(void){
    int myVariable = 0;
    intptr_t varPointer = (intptr_t)&myVariable;

    *(int*)varPointer += 1; 
    printf("%d\n", myVariable);
    return 0;
}

此代码使用整数运算而不是指针运算:

#include <stdio.h>
#include <stdint.h>

int main(void)
{
    int myVariable = 0;
    uintptr_t varPointer = (uintptr_t)&myVariable;

    varPointer += sizeof myVariable;

    return 0;
}

您在评论中说:

pointers /can/ contain addresses, but do not necessarily.

指针变量必须是空指针或包含对象的地址。如果您的代码似乎不这样做,那么您的程序已经导致了未定义的行为。

"Hex"与此无关;以 16 为基数是一种输出数字的方式,您可以使用任何您喜欢的基数。

请记住,指针不一定对应于数字。在它们不存在的平台上,uintptr_t 将不存在。