我想将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
将非指针值"编码"到指针中有时很有用,例如,当您需要将数据传递给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的情况下,将指针传递给封装您想要传递的数据的某个结构也更合乎逻辑.
所以,基本上......"不要".
你想要这样做:
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。
| 归档时间: |
|
| 查看次数: |
28256 次 |
| 最近记录: |