打印指针值

时间:2012-08-23 21:08:48

标签: c++ pointers

我编写了以下程序来理解向指针值添加整数值。在我的例子中,指针指向整数。我知道如果p是一个指向整数的指针,那么p + 2是存储“两个整数前面”(或2 * 4个字节= 8个字节)的整数的地址。下面的程序按照我对整数数组的预期工作,但对于char数组,它只打印空行。有人可以向我解释原因吗?

#include <iostream>

int main() {

    int* v = new int[10];

    std::cout << "addresses of ints:" << std::endl;

    // works as expected
    for (size_t i = 0; i < 10; i++) {
        std::cout << v+i << std::endl;
    }

    char* u = new char[10];

    std::cout << "addresses of chars:" << std::endl;

    // prints a bunch of empty lines
    for (size_t i = 0; i < 10; i++) {
        std::cout << u+i << std::endl;
    }

    return 0;
}

3 个答案:

答案 0 :(得分:6)

这是因为char *具有特殊意义(C字符串),因此它会尝试将其打印为字符串。投射指针让cout知道你想要的东西:

std::cout << (void *)(u+i) << std::endl;

答案 1 :(得分:1)

当您打印char*时,您正在打印字符串。所以,你得到了垃圾值。您可以将其强制转换为int来打印它。

std::cout << (int)(u+i) << std::endl;
来自评论的

编辑

正如已经指出的那样,void*演员阵容更好。打印int的AFAIK很好,但void*是正确的方法

答案 2 :(得分:1)

当我将指针值转换为long long时,它对我有用。

    std::cout << (long long)(u+i) << std::endl;

如果你有一个大内存(> 2 GB)

,你应该使用long long而不是int