牛骨文教育服务平台(让学习变的简单)
博文笔记

如何打印指针的值

创建时间:2007-06-07 投稿人: 浏览次数:8080

#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...

 

 

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。