理解sizeof与指针的关系
Understand sizeof in relation to 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。我哪里做错了?谢谢。
打印的不是指针的大小(通常是4或8字节),而是指针存储的地址。因此程序显示第一个和最后一个元素所在的内存地址。这里的size_t
与sizeof
算子无关;您只执行一个强制转换。如果您删除size_t
,您将最终打印由char数组表示的字符串。但是,由于您的数组不表示合法的C-string(没有零终止符和不可显示的字符),您很可能会以段错误告终。
char
是一个字节,指向字符的指针通常占用32位(4字节)或64位(8字节),具体取决于您的机器和环境。最后是一个地址
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 当依赖关系和依赖关系都是多态时,在哪个继承级别存储依赖关系指针?
- 指针和程序性能之间有什么关系吗?
- 如何解决指针数组中的数据依赖关系
- 指针 与局部变量的关系
- 回调和函数指针是什么关系
- 在特定情况下,指针删除和铸造之间的关系不清楚
- 使用关系运算符比较指针意味着什么
- 对齐方式与指针中尾随零的数量有何关系
- 如果存在任何循环关系,我应该假设弱指针使用吗?
- 为什么指针类型的内置关系运算符不生成C++的总顺序?
- 一旦使用,整个程序中的智能指针及其依赖关系
- 删除对特定类型的指针的依赖关系
- 智能指针的依赖关系注入是否违反单一责任原则
- 为什么有人告诉我数组是指针?C++中数组和指针之间的关系是什么
- C++引用和指针关系
- 在指向同一个类的两个不同指针之间建立对应关系
- 理解sizeof与指针的关系
- 双指针和二维数组之间的关系是什么?