函数标头中的C/C 数组变量
C/C++ array variable in function header
我们可以将数组作为c/c 函数标头的变量传递,如
中int func(int arr[]) { ... }
我想知道:在传递到功能标头的变量中,[]
内部是否有可能发生某些东西,还是总是空?
对于任何(非参考)类型T
,函数签名R foo(T t[])
和R foo(T t[123])
(或任何其他数字)与R foo(T * t)
相同,并且通过传递第一个元素的地址传递数组。
请注意,T
本身可能是数组类型,例如T = U[10]
。
对于一维数组,它将始终为空,括号是另一种写作方式:
int fun(int * arr)
{
}
至于二维数组,您需要指定每个元素本身
的元素数量int fun(int arr[][3])
{
}
int func(int arr []){...} 是传递到函数的数组的无效的解剖。
阵列名称是指针变量。因此,我们只通过数组名称(本身就是指针)
就足够了int func(int *arr){...}会将数组的起始地址传递到该函数,以便它可以使用数组。
如果需要完整地保持原始数组,则可以创建数组的副本&在功能中使用。
数组的名称在大多数上下文中腐烂到 Pointer 到其第一个元素。所以当你写
时void f(int arr[]);
void g(int arr[42]);
名称 arr
腐烂到int指针。这两个声明等同于这些声明:
void f(int *arr);
void g(int *arr);
名称不衰减的两个位置在数组的定义中,作为sizeof
的论点。因此,全局范围的此声明并不能定义指向INT的指针:
int arr[];
我提到这个特殊的,因为这是一个容易犯的错误,而且很难追踪。即使未指定元素的数量,这也定义了一个数组,而不是指针。这是一个错误(但不必诊断出一个错误)从另一个源文件中引用arr
为int *arr;
。
相关文章:
- 将数组的地址分配给变量并删除
- 试图让变量检查数组中的某些内容
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 在C++中将变量 wstring 分配给 Char 数组
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- c++ 中的别名变量数组
- 使用类的其他成员变量定义类的成员变量数组
- 可视化 如何在C++中使用复杂变量数组
- 如何 for 循环类变量数组
- 按变量数组中的列将一组整数从文本文件读入
- 运行时C++中的变量数组维度
- C++变量数组
- 将变量(数组类型)从函数传递到"main"范围类型:标准::tr1::match_results<标准::字符串::const_iterator>
- 在堆栈上使用大变量/数组的缺点
- 如何在继承类中创建父类变量数组作为私有成员
- 如何创建一个类变量数组
- 需要以编程方式初始化类变量数组,我怎么做最好
- 直接使用变量(数组中的数据返回相同)或与指针一起使用
- 如何用模板类型初始化成员变量数组