如何打印指针的值
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
template <class T, int TA>
T addValue(T const& v)
{
return v + TA;
}
int(*af1)(int const&) = addValue<int, 1>;
int(*af2)(int const&) = addValue<int, 1>;
int(*af3)(int const&) = addValue<int, 3>;
int main()
{
std::cout << af1 << std::endl;
std::cout << af2 << std::endl;
std::cout << af3 << std::endl;
return 0;
}
输出:
C:/WINDOWS/system32/cmd.exe /c a.exe
1
1
1
Hit any key to close this window...
问题:af1、af2、af3不是指针吗?为什么指针不能直接打印出他具体的值呢?
但是这样又是可以的:
int*p = new int(3);
std::cout << p << std::endl
一个指针,抛开类型不谈,他是一个指向另一个对象的地址,在WIN32下,一个对象的地址是32位的,32位刚好是一个整形,也就是说指针的值可以转换成一个32位整形。下面的输出是一样的:
int*p = new int(3);
int pv = (int)p;
std::cout << std::hex << pv << std::endl;
std::cout << std::hex << p << std::endl
但是为什么函数指针的输出是个1呢?
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
template <class T, int TA>
T addValue(T const& v)
{
return v + TA;
}
int(*af1)(int const&) = addValue<int, 1>;
int(*af2)(int const&) = addValue<int, 1>;
int(*af3)(int const&) = addValue<int, 3>;
int main()
{
std::cout << (void*)af1 << std::endl;
std::cout << (void*)af2 << std::endl;
std::cout << (void*)af3 << std::endl;
return 0;
}
现在就可以了,其实转成(int)也可以。
C:/WINDOWS/system32/cmd.exe /c a.exe
0x410a20
0x410a20
0x410a2c
Hit any key to close this window...
- 上一篇: c++指针输出
- 下一篇: c++ 指针值和指针地址的输出&指针和数组保存字符串的区别