C或c++语言中的数组实际上是指针吗?
Are arrays in C or C++ language actually Pointers
C语言中的数组实际上是指针吗?为什么不呢?在c++中?
指针可以在普通C/c++(编程)中用于解引用任何数量的值吗?它所指向的内存没有任何限制吗?假设我声明char *ptr
。然后我可以解引用单个字符。还有1000个字符的字符串?有多少个字符串?(为什么没有限制)?
与C和c++编程相同吗?如果没有,为什么不呢?
C语言中的数组不是指针。数组是(可能很大的)连续的内存块——由许多较小的对象组成的对象,称为数组元素。
至于"为什么不"……数组在B和BCPL语言(C的前身和祖先)中曾经是指针。它们是C的第一个粗略版本——"胚胎"C中的指针。然而,C语言想要引入聚合struct
类型的概念。如果数组在C中被实现为指针,那么包含数组的struct
对象将需要非平凡的初始化("构造"),并且将变得不可复制(即使是memcpy
)。这被认为是不可接受的。这就是导致在C中重新设计数组思想的原因。你可以在Dennis Ritchie的C语言的发展页面(参见"胚胎C"部分)上读到它。
至于你可以通过指针访问多少内存…阅读指针运算。
c++中的原始数组实际上与C中的相同。
指针所指向的内存量仅受计算机内存量的限制。它只指向特定项开始的位置;它没有说接下来会有多少。实际上,它确实携带了一些关于它所指向的第一个对象的大小的信息,但没有关于后面有多少个对象的信息。
如果你用食指指着一所房子,房子会变成你的手指吗?
你可以用食指指的东西是否有一个限制?
(是的,这个类比只能到此为止,但你有其他合适的答案。)
数组不是指针。
-
int arr[10]
:-
使用的内存量是
sizeof(int)*10
字节 -
arr
和&arr
的值必须相同 -
arr
指向一个有效的内存地址,但不能设置为指向另一个内存地址
-
-
int* ptr = new int[10]
:-
使用的内存量是
sizeof(int*) + sizeof(int)*10
字节 -
ptr
和&ptr
的值不一定相同(事实上,它们大多不同) -
ptr
可以设置为指向任何东西(有效和无效的内存地址),只要你愿意
-
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 关于将指针作为参数传递到函数:它实际上在函数中创建了新的指针
- 我实际上是在调用 ctor 并在指向对象的指针上初始化 vtable 吗?C++
- 指针实际上是如何按类型递增的
- 为什么自由函数指针总是指针类型,而成员函数指针实际上不是指针?
- C或c++语言中的数组实际上是指针吗?
- "dynamic_cast"之后的 NULL 指针实际上可以取消引用吗?