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
将不存在。
我基本上很好奇你是否可以在不使用指针的情况下做这样的事情:
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
将不存在。