def*_*alt 7 c++ arrays function
我不明白为什么下面的例子编译和工作:
void printValues(int nums[3], int length) {
for(int i = 0; i < length; i++)
std::cout << nums[i] << " ";
std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)
似乎完全忽略了3的大小,但是放置无效大小会导致编译错误.这里发生了什么?
AnT*_*AnT 11
在C++(以及C语言)中,使用数组类型声明的参数总是立即衰减为指针类型.以下三个声明是等效的
void printValues(int nums[3], int length);
void printValues(int nums[], int length);
void printValues(int *nums, int length);
Run Code Online (Sandbox Code Playgroud)
即大小无关紧要.然而,它仍然不意味着你可以在那里使用无效的数组声明,例如,指定负数或零大小是非法的.
(顺便说一句,同样适用于函数类型的参数 - 它会立即衰减到指针到函数类型.)
如果要强制参数和参数之间的数组大小匹配,请在参数声明中使用指针或引用数组类型
void printValues(int (&nums)[3]);
void printValues(int (*nums)[3]);
Run Code Online (Sandbox Code Playgroud)
当然,在这种情况下,大小将成为编译时常量,并且没有任何传递点length.
| 归档时间: |
|
| 查看次数: |
3984 次 |
| 最近记录: |