arr++ 在函数"int f(int arr[])"中是什么意思?
What does arr++ mean in a function "int f(int arr[])"?
我正在查看这段代码,除了一件事之外,几乎理解了所有代码:Arr1++
是什么意思?
它对数组有什么作用?因为Arr1
不仅仅是像int
这样的普通变量。
bool theSameElements(int Arr1[], int Arr2[], int size)
{
int temp;
if (size == 0)
{
return true;
}
for (int i = 0; i < size; i++)
{
if (Arr1[0] == Arr2[i])
{
temp = Arr2[i];
Arr2[i] = Arr2[0];
Arr2[0] = temp;
Arr1++;
Arr2++;
return theSameElements(Arr1, Arr2, size - 1);
}
}
return false;
}
任何作为函数参数传递的数组都会隐式转换/衰减为类型 int*
的指针。现在Arr1
是一个指向第一个数组元素的指针,即 Arr1[0]
。这称为数组到指针衰减。应用后增量运算符:
Arr1++;
将指针值递增它指向的数据大小,因此现在它指向第二个数组元素Arr1[1]
。
话虽如此,您应该更喜欢 std::array 而不是原始数组,更喜欢智能指针而不是原始指针。
所以你需要知道的是 Arr
,在这种情况下,是指向数组的指针。因此,当您执行Arr++
时,基本上是递增指向此数组的指针。
看似具有数组类型的函数参数,实际上具有指针类型。 int foo[3]
和 int foo[]
在函数参数列表的上下文中(并且仅在该上下文中(与 int* foo
完全相同。因此,您可以对它们执行通常无法对数组执行的操作,例如重新分配其值。
相关文章:
- "类模板示例<int>;"语句对 C++11 是什么意思?
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- map<string, int> m= {}; 在C++中是什么意思?
- 行 - " vector<int> used(adj.size(), 0); "是什么意思?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 代码中的"vector<<int>vector>&index"是什么意思?
- 在这种情况下,int**在C中是什么意思
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- "int(i)=1;"是什么意思?
- freq_table[field_pm_value] = map<string, int>(); 是什么意思?
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?
- map<int,int>的*迭代器是什么?它不是pair<int,int>
- 在C#中等效于未签名的长Int是什么
- "cannot Convert vector<int>* to int"是什么意思?
- <T::* int>是什么意思?
- C++中的新Bytef[int]是什么
- *new int是什么意思?
- A<int(int)>是什么意思?这项技术叫什么名字?