JDS*_*JDS 1 c pointers memory-address
我想基本上做以下(这可能是危险的,不是什么)只是为了它:
int main() {
int x = 0x00ff00ff;
printf("Value at addr x: %x\n",*x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
基本上看一下我机器中某个地址的内容.也许写信给它.我猜我不允许做后者.
我得到的错误是error: invalid type argument of 'unary *'.
有没有办法做到这一点?
你需要一个指针:
int *x = (int*)0x00ff00ff;
Run Code Online (Sandbox Code Playgroud)
你是对的,这可能不是一个好主意,除非你知道这0x00ff00ff是某种有效的地址.它实际上并不是未定义的行为,因为标准规定您不能取消引用非法地址,但随后声明"非法"包括以下内容:
但是没有明确列出任意指针值,因为这会使嵌入式系统中的内存映射I/O出现问题.
例如,您可以通过读取或写入已知的内存映射I/O地址来控制嵌入式系统中的UART(通用异步接收器/发送器,基本上是串行端口器件):
#define UART_READ_READY ((char*)0xff00)
#define UART_READ_CLEAR ((char*)0xff01)
#define UART_DATA ((char*)0xff02)
char getUartCharWithWait (unsigned int tries) {
char retChar;
unsigned int limit;
// Keep looping until character available, at least for a while.
limit = tries;
while (*UART_READ_READY == 0)
if (limit-- == 0)
return '\0';
// Get character, tell UART to clear it, then return it.
retChar = *UART_DATA;
*UART_CLEAR = 1;
return retChar;
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,您有以下代码:
retChar = *UART_DATA;
Run Code Online (Sandbox Code Playgroud)
它将char从"存储器"地址读取字节(C )0xff02,该地址实际上来自监视地址总线并拦截特定地址的设备.