指针和方括号
Pointers and Square Brackets
我很难解析这行代码:
int *a=new int[N];
因此声明了一个新的整型指针"a",无论它指向哪里,都会存储一个指向大小为(int+N)的对象的新指针。这是因为
int[N]:=*(int+N)
这里的问题是N是类size_t的一个实例,那么这个加法怎么有意义呢?完整代码如下:
int main()
{
const std::size_t N = 100;
int* a = new int[N];
for (std::size_t n = 0; n < N; ++n)
a[n] = n;
delete[] a;
}
您将int[N]
视为数组访问,如array[5]
与*(array + 5)
相同。不是这样的。毕竟,int
是一种类型。
new int[N]
实际上是一个分配N
int
s数组的表达式。它返回指向该数组中第一个int
的指针,然后将其赋值给a
。
值得注意的是,像这样的每个表达式都应该与一个delete[]
相结合,当你完成它时,它负责释放数组(就像每个正常的new
都应该有一个delete
)。
我很难解析这行代码:
int *a=new int[N];
如果N
等于10,内存中发生的情况如下:
0 1 2 3 4 5 6 7 8 9
+---+---+---+---+---+---+---+---+---+---+
| | | | | | | | | | |
+---+---+---+---+---+---+---+---+---+---+
^
|
+-|-+
| * | a
+---+
也就是说,您在堆上创建了一个包含10个整数的数组,并且a
指向这些整数中的第一个。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 方括号数组和指针数组之间的区别是什么
- 指针和方括号
- c++中指针类中的[]方括号是什么意思?