int arr[] = { 3, 5, 9, 2, 8, 10, 11 };
int arrSize = *(&arr + 1) - arr;
std::cout << arrSize;
我不知道这是怎么回事。所以任何人都可以帮我做这件事。
如果我们将数组与指针一起“绘制”,它将如下所示:
+--------+--------+-----+--------+-----+
| arr[0] | arr[1] | ... | arr[6] | ... |
+--------+--------+-----+--------+-----+
^ ^ ^
| | |
&arr[0] &arr[1] |
| |
&arr &arr + 1
表达式&arr
和&arr+1
的类型是int(*)[7]
。如果我们取消引用这些指针中的任何一个,我们将得到int[7]
类型的值,并且与所有数组一样,它将衰减为指向其第一个元素的指针。
因此,我们使用指向&arr+1
的第一个元素的指针(取消引用实际上使这个UB,但仍然适用于任何正常的编译器)和指向&arr
的第一个元素的指针之间的差异。
所有指针算术都是在指向类型的基本单元中完成的,在本例中是int
,因此结果是指向的两个地址之间int
元素的数量。
了解数组将自然衰减为指向其第一个元素的指针可能很有用,即表达式arr
将衰减为&arr[0]
,其类型为int*
。
此外,对于任何指针(或数组)p
和索引i
,表达式*(p+i)
正好等于p[i]
。因此*(&arr+1)
实际上与(&arr)[1]
相同(这使得UB更加可见)。
我不知道这是怎么运作的。所以任何人都可以帮我。
当我像下面这样写的时候 我可以得到这个输出。 输出 我认为test[0]=100->test[0]^1=101,但它不是。 你能解释一下有什么不同吗?
Arr 类别是一系列与阵列协作的辅助函式。 is_multi($arr, $all_keys = false) is_multi 方法检查传递的阵列是否是多维阵列。 静态 是 参数 参数 预设 描述 $arr 必要 要检查的阵列。 $all_keys false 检查所有元素都是阵列。 回传 布林 範例 // 单一阵列 $arr = array('one' => 1, 'two' => 2); e
本文向大家介绍实例分析Array.from(arr)与[...arr]到底有何不同,包括了实例分析Array.from(arr)与[...arr]到底有何不同的使用技巧和注意事项,需要的朋友参考一下 写在开头: 在正文开始之前我们先说明一下类数组(估计大家一定不会陌生) 类数组的特点 1.有索引 2.有长度 3.是个对象 4.能被迭代 特点说明:对于类数组的特点前三个我就不做说明了哈,主要就是最后
刚从C开始,我想知道是否有人能解释一些事情。 我相信你可以用下面的方法初始化一个字符数组 这将创建一个字符数组,其值为。 但如果我真的创造了这个: 会创建一个数组,以及指向该数组的指针吗? 例如:将指向内存中的第一个元素,以及数组中的其他元素?
对于那些不知道_. allKeys(obj)做什么的人,这里有一个片段 因此,它返回传递给它的对象的属性/方法名称数组。 这应该给我: 属性名称:firstname 值名称:John ------ 属性名称:lastname 值名称:Adams ------ 相反,它给了我: 属性名称:firstname 值名称:un定义 ------ 属性名称:lastname 值名称:un定义 ------