将int转换为指针

AJ.*_*AJ. 4 c++ pointers

我想将int值保存到指针变量.但是我收到一个错误:

#include <iostream>
using namespace std;

int main()
{
  int *NumRecPrinted = NULL;
  int no_of_records = 10;
  NumRecPrinted = (int*)no_of_records; // <<< Doesn't give value of NumRecPrinted

  cout << "NumRecPrinted!" << NumRecPrinted;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我尝试这样做,但我得到0作为回报:

int main()
{
    int demo(int *NumRecPrinted);
    int num = 2;
    demo(&num);
    cout << "NumRecPrinted=" << num;    <<<< Prints 0
    return 0;
}

int demo (int *NumRecPrinted)

{
    int no_of_records = 11;
    NumRecPrinted = &no_of_records;
}
Run Code Online (Sandbox Code Playgroud)

NumRecPrinted返回0

Lig*_*ica 7

将非指针值"编码"到指针中有时很有用,例如,当您需要将数据传递给pthreads线程参数(void*)时.

在C++中,你可以通过hackery来做到这一点; C风格的演员表就是这个hackery的一个例子,实际上你的程序可以按照需要运行:

#include <iostream>
using namespace std;

int main()
{
  int *NumRecPrinted = NULL;
  int no_of_records = 10;
  NumRecPrinted = (int*)no_of_records;

  cout << "NumRecPrinted!" << NumRecPrinted; // Output: 0xa (same as 10)
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

您只需要意识到这0xa是十进制的十六进制表示10.

然而,这一个黑客; 你不应该将ints 转换成指针,因为一般来说它没有任何意义.实际上,即使在pthreads的情况下,将指针传递给封装您想要传递的数据的某个结构也更合乎逻辑.

所以,基本上......"不要".


mat*_*way 5

你想要这样做:

NumRecPrinted = &no_of_records;
Run Code Online (Sandbox Code Playgroud)

即您正在获取 的地址no_of_records并将其分配给NumRecPrinted

然后打印它:

cout << "NumRecPrinted!" << *NumRecPrinted;
Run Code Online (Sandbox Code Playgroud)

即您正在取消引用NumRecPrinted,这将存储int在 指向的内存地址处NumRecPrinted