理解sizeof与指针的关系

Understand sizeof in relation to pointers

本文关键字:关系 指针 sizeof 理解      更新时间:2023-10-16

在我的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。我哪里做错了?谢谢。

打印的不是指针的大小(通常是4或8字节),而是指针存储的地址。因此程序显示第一个和最后一个元素所在的内存地址。这里的size_tsizeof算子无关;您只执行一个强制转换。如果您删除size_t,您将最终打印由char数组表示的字符串。但是,由于您的数组不表示合法的C-string(没有零终止符和不可显示的字符),您很可能会以段错误告终。

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