template<>
auto max_n<char *>(char **char_arr, int num) -> char * {
int max_str{};
char *max_point{};
for (int i = 0; i < num; ++i) {
int temp_num{};
for (int j = 0; char_arr[i][j] != '\0'; ++j)++temp_num;
if (temp_num > max_str)max_point = char_arr[i];
}
return max_point;
}
auto sixth_practice() -> void {
int int_num[9]{1, 6, 5, 7, 4, 2, 3, 9, 5};
cout << "int_num max number is " << max_n(int_num, 9) << endl;
// char **str_arr = new char *[5]{new char[30]{}, new char[30]{}, new char[30]{}, new char[30]{}, new char[30]{}};
// strcat(str_arr[0],"guanweiyv");
// strcat(str_arr[1],"ankuo");
// strcat(str_arr[2],"xvpeng");
// strcat(str_arr[3],"wangyatao");
// strcat(str_arr[4],"renhongchuan");
char str_arr[5][30] = {"guanweiyv", "ankuo", "xvpeng", "wangyatao", "renhongchuan"};
char *max_str = max_n(str_arr, 5);//这里报错No matching function for call to 'max_n'
//但是我用上面注释的方法就可以完美运行,二维数组str_arr[0]不就是二维数组的指针吗,
//二维数组的指针不就是指针的指针,这里为什么报错呢
cout << "max_str is ";
for (int i = 0; max_str[i] != '\0'; ++i)cout << max_str[i];
cout << endl;
}
二维数组和char **不是一回事,不能将二维数组赋值给指针的指针
改为
char * max_str = max_n((char **)str_arr, 5);牵制转换一下,你看行不行