1 问题
由代码代码可以看出,数组作为参数传递时,输出数组长度只是数组一个指针变量的大小(由于电脑是64位机器,因此输出64位,即8字节)【传递的是数组的首地址,即指向第一个元素的指针】。也就是函数和编译器都不知道传递给它的数组的实际长度。
#include <iostream>
using std::cout; using std::endl;
void Test(char A[20]){
cout<< sizeof(A) <<endl;
}//输出8字节(64位指针变量)
void Test2(char* A){
cout << sizeof(A) <<endl;
}//输出8字节
void Test3(char (&A)[20]){
cout << sizeof(A) << endl;
}//输出20字节
int main(){
char A[20] = {0};
Test(A);
Test2(A);
cout<< sizeof(A) <<endl;
Test3(A);
return 0;
}
2 解决方法
2.1 使用引用
void Test3(char (&A)[20]){
cout << sizeof(A) << endl;
}//输出20字节
2.2 提供额外参数
void Test4(char A[], int size){
}