理解与指针相关的sizeof

时间:2016-09-25 21:21:20

标签: c++ pointers

在我的C ++课程中,老师给了我这段代码。

#include <iostream>

using std::cout;
using std::endl;

int main()
{
    char numbers[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
            11, 12, 13, 14, 15, 16, 17 };
    char *ptrNumber;
    ptrNumber = &numbers[0];

    // Address of first and last index
    cout << (size_t)(ptrNumber) << " to " << (size_t)(ptrNumber + 17) << endl;
}

打印

12647972 to 12647989

现在我以前认为指向char的指针大小会有1个字节,这意味着(size_t)(ptrNumber)(size_t)(ptrNumber+17)都会打印1.我在哪里错了?感谢。

2 个答案:

答案 0 :(得分:2)

您打印的内容不是指针的大小(btw通常为4或8个字节),而是指针存储的地址。因此程序显示第一个和最后一个元素所在的内存地址。 size_t此处与sizeof运算符无关;你只进行演员表演。如果删除size_t,则最终将打印由char数组表示的字符串。但是因为你的数组不代表合法的C字符串(没有零终结符和不可显示的字符),你很可能最终会遇到段错误。

答案 1 :(得分:1)

A char是一个字节,指向字符的指针通常占用32位(4字节)或64位(8字节),具体取决于您的机器和环境。这是最后的一个地址。