1
6
C++是静态类型的,所以编译器当然理解这一点。
原因
当我将数组传递给函数int*in而不是int[]时,我获得或失去的是什么?
他们做的完全一样,所以你别无选择。可能你被C++语法允许的事实误导了。
如果我问你Y的数据类型是什么
它是
这个 它所拥有的价值 是指向数组(第一个元素)的指针。在我想说“指向数组的指针”的情况下,我经常使用这个公式:“指向(的第一个元素)”,但不能,因为涉及到的类型是否是指向数组的指针可能存在歧义。 但是,数组中的指针很少在C++中使用,因为数组的大小是类型的一部分。C++中没有这样的“int数组指针”,即“1 int数组的指针”、“指向2 int数组的指针”等等。这通常不是很方便,因此使用一个数组的第一个元素的指针,该数组的大小在编译时可能不知道。 这真的是因为指针算术恰好把我放在仍然有效的内存空间中吗?
差不多,是的。数组的大小是z类型的一部分,但不是x或y类型的一部分,也不是z衰减到其第一个元素的指针的结果类型的一部分。所以
不过,“发生”是留给机会的太多——使用数组时的一部分工作是确保您不会偏离它们的界限。
[*]
丹尼斯·里奇决定不允许这样做,因为这样做会妨碍他以他需要的方式区分数组和指针。所以
另一个似是而非的意思是
|
2
6
指针和数组的根本区别在于指针具有唯一的内存地址 持有 数组数据的地址。 数组名虽然被视为基于上下文的指针,但它本身没有可以获取其地址的内存位置。当它被视为指针时,它的值在运行时作为第一个元素的地址生成。 这就是为什么您可以将其值赋给另一个指针,但不能将其赋给另一个指针。没有可作为l值处理的指针内存位置。 |
3
5
数组不是指针,但 数组容易衰减到指针 到他们的第一个元素。此外,C(和C++)允许 用于指针的数组访问语法 .
你什么也得不到,因为
它是指向动态分配数组的第一个元素的指针。
将不同类型的不同对象的地址分配给同一指针。(你漏了一个
是的。如我所说,指针方便而混乱地允许数组语法应用于它们。但是,这仍然不能使指针成为数组。 |
4
2
这是一段来自 this book (C++语义遵循与C的向后兼容性)。在以下情况下,数组“are”指针:
这基本上意味着:
相当于:
然后
相当于:
和
相当于:
另一方面,指针永远不会转换回数组——这就是最后两行不能编译的原因。 |
5
1
阿法克,一个只是另一个的句法糖,它们的意思完全一样。
版本
当涉及到真正的多维数组与指针数组(指向数组)时,您会注意到一个区别,因为在这种情况下,只有第一个维度衰减到具有多维数组的指针。这些东西在内存中具有完全不同的布局(一个大的连续块与一个指向不同内存块的小指针块)。
Y类型是指向int的指针。事实上,如果是动态分配的数组,则根本看不到该数组!也就是说,与实际数组不同,没有办法用size of来确定分配的大小。
这是因为x是一个指针。你不能这样做
|
6
1
|
7
1
作为一个旁白(与主题有一定的相关性——可以添加这个作为注释,但没有足够的代表性)——你可以使用指针来衡量数组中元素的数量。或者以不同的方式声明size of返回size of(array_type)*array中的num_元素,而返回指针的大小。Glib提供 this macro 为此目的。 |
8
0
你没有得到或失去任何东西
我称Y为指向整数数组的指针
也, 可用分配内存 . |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |