C++ 你能解引用一个整数文本吗?
是否可以使用,例如:C++ 你能解引用一个整数文本吗?,c++,pointers,C++,Pointers,是否可以使用,例如: int x = *776 要从特定内存位置获取值?或者你一定要使用: int ref = 776; int x = *ref; int ref = 776; int x = *ref; 当然,内存地址可以由某些整数文本表示,例如 int* ptr = reinterpret_cast<int*>(776); 这是合法的。也是如此 int value = *reinterpret_cast<int*>(776); 您不能使用该代码,这完全是无
int x = *776
要从特定内存位置获取值?或者你一定要使用:
int ref = 776;
int x = *ref;
int ref = 776;
int x = *ref;
当然,内存地址可以由某些整数文本表示,例如
int* ptr = reinterpret_cast<int*>(776);
这是合法的。也是如此
int value = *reinterpret_cast<int*>(776);
您不能使用该代码,这完全是无稽之谈,无法编译
你的意思可能是
int* ref = reinterpret_cast<int*>(776);
int x = *ref;
int*ref=重新解释铸造(776);
int x=*ref;
如上所述
int x = *reinterpret_cast<int*>(776);
intx=*重新解释铸造(776);
也是合法的。当然,内存地址可以由某些整数文本表示,例如
int* ptr = reinterpret_cast<int*>(776);
这是合法的。也是如此
int value = *reinterpret_cast<int*>(776);
您不能使用该代码,这完全是无稽之谈,无法编译
你的意思可能是
int* ref = reinterpret_cast<int*>(776);
int x = *ref;
int*ref=重新解释铸造(776);
int x=*ref;
如上所述
int x = *reinterpret_cast<int*>(776);
intx=*重新解释铸造(776);
也是合法的。简而言之,不。你不能说
intx=*776因为776
是一个整数文本,并被解释为int
而不是int*
较长的答案是,您(可能)不想这样做(明确取消引用特定内存地址的概念),因为(1)它不可移植,(2)使您的代码非常脆弱,(3)没有真正做到您希望它做的事情
有很多方法可以实现,但它们并不相互兼容。最基本的方法称为直接寻址。这是内存中每个位置都有一个地址的地方,当您说“转到位置0x308”时,它会转到物理内存中的那个单元。这可能非常危险,因为您可以访问操作系统或BIOS正在使用的内存区域。它还防止您(轻松地)在计算机上运行多个程序
间接访问内存的其他方法是相对(偏移)寻址和分段寻址。在您使用的地址和物理布局之间有一层保护层,可以防止您访问不应该访问的内存。一般来说,这就是为什么你会犯错误
如果您编写的代码访问特定位置的内存,操作系统可能会为您搞糟一切,或者您可能会损坏微控制器
虽然你可以做intx=*((int*)776)代码>,您可能不想这样做,它很可能会出错。简而言之,不。您不能说intx=*776因为776
是一个整数文本,并被解释为int
而不是int*
较长的答案是,您(可能)不想这样做(明确取消引用特定内存地址的概念),因为(1)它不可移植,(2)使您的代码非常脆弱,(3)没有真正做到您希望它做的事情
有很多方法可以实现,但它们并不相互兼容。最基本的方法称为直接寻址。这是内存中每个位置都有一个地址的地方,当您说“转到位置0x308”时,它会转到物理内存中的那个单元。这可能非常危险,因为您可以访问操作系统或BIOS正在使用的内存区域。它还防止您(轻松地)在计算机上运行多个程序
间接访问内存的其他方法是相对(偏移)寻址和分段寻址。在您使用的地址和物理布局之间有一层保护层,可以防止您访问不应该访问的内存。一般来说,这就是为什么你会犯错误
如果您编写的代码访问特定位置的内存,操作系统可能会为您搞糟一切,或者您可能会损坏微控制器
虽然你可以做intx=*((int*)776)代码>,您可能不想这样做,它很可能会出错。intx=*((int*)776)
。恭喜你,你可能已经找到了最快的解决问题的方法之一!776
是否寻址特定的内存地址?或者你的意思是什么?Gents:在x86、Linux和Windows之外还有一个世界-在微控制器上,这(第二个,如果你添加一些适当的强制转换)是一个有用的构造(假设内存位置存在并且对某人有意义)。而且:这是语言绝对允许的。第一个不是这样:在C中,除了NULL之外,没有其他方法来表示指针文字。@tofro第二个不起作用。编译器将不允许您取消对int
的引用。一些铸件(见上文和πάνταῥεῖ 请注意,任何时候当您想要指向特定物理位置的内存时,您可能希望避免优化这些内存访问。因此,使用(volatile int*)
,而不仅仅是(int*)
intx=*((int*)776)
。恭喜你,你可能已经找到了最快的解决问题的方法之一!776
是否寻址特定的内存地址?或者你的意思是什么?Gents:在x86、Linux和Windows之外还有一个世界-在微控制器上,这(第二个,如果你添加一些适当的强制转换)是一个有用的构造(假设内存位置存在并且对某人有意义)。而且:这是语言绝对允许的。第一个不是这样:在C中,除了NULL之外,没有其他方法来表示指针文字。@tofro第二个不起作用。编译器将不允许您取消对int
的引用。一些铸件(见上文和πάνταῥεῖ 请注意,任何时候当您想要指向特定物理位置的内存时,您可能希望避免优化这些内存访问。因此,使用(volatile int*)
,而不仅仅是(int*)
“是合法的。”如果您对“合法”的定义包括“未定义的行为”,那么请确定。@Nicolas Casting并不意味着未定义的行为,只要您知道自己在做什么。你的洗衣机怎么样