对于许多问题,答案似乎可以在"标准"中找到.但是,我们在哪里找到它?最好是在线.
谷歌搜索有时会觉得徒劳,尤其是对于C标准,因为他们在编程论坛的大量讨论中被淹没.
要开始这个,因为这些是我现在正在搜索的,那里有很好的在线资源:
我试图将地址的值存储在非指针int变量中,当我尝试转换它时,我得到编译错误"无效转换从'int*'到'int'"这是我正在使用的代码:
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
vector<int> test;
int main() {
int *ip;
int pointervalue = 50;
int thatvalue = 1;
ip = &pointervalue;
thatvalue = ip;
cout << ip << endl;
test.push_back(thatvalue);
cout << test[0] << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 这个问题可能会被问到,但我搜索到了,找不到答案.
我正在实现一个玩具虚拟机,其中OpCodes采用以下形式:
std::tuple<int8_t, int64_t, int64_t> // instruction op1, op2
Run Code Online (Sandbox Code Playgroud)
我正在尝试将一个double打包到其中一个操作数中,并在处理它时再次读回它.这不能可靠地工作.
double d = ...
auto a = static_cast<int64_t>(d);
auto b = static_cast<double>(a)
// sometimes, b != d
Run Code Online (Sandbox Code Playgroud)
有没有办法将double的位表示打包成int64_t,然后读取该位模式返回得到与之前完全相同的双精度数?
最近,我对指针感到好奇,而且我不明白为什么以下命令不起作用。
我的想法是创建一个变量,说出它的地址(十进制),要求用户将其输入回来,并将其作为指向前一个变量的指针的地址。最后,两个变量应具有相同的值。
最后一个指针应该指向一个错误的内存地址,因为它存在段错误,但是当我打印指针的地址时,它们是相同的!
#include <iostream>
int main() {
int temp = 0;
printf("Temporary integer addr 0x%x (dec %d)\n", &temp, &temp);
int input = -1;
printf("Give me an address to read (in dec)\n");
std::cin >> input;
printf("You chose the number %d (hex 0x%x)\n", input, input);
int* intPtr = (int*)input;
int* tempPtr = &temp;
if (intPtr == tempPtr) {
printf("It works, they are equal!\n");
} else {
printf("Expected: 0x%x got 0x%x\n", tempPtr, intPtr);
printf("Expected value: 0x%d got 0x%d", temp, *intPtr); // segfaults …Run Code Online (Sandbox Code Playgroud) 初学者问题:如何获取指针的地址并将其保存为int?例:
int *ptr = xyz;
int i = static_cast<int>(ptr);
Run Code Online (Sandbox Code Playgroud)
因此,如果ptr指向内存地址123,我应该是123.我的编译器说它是一个error: invalid static_cast from type 'int*' to type 'int'.
猜猜我错过了什么,但我不知道是什么.