char str[m][n] 和 char *str[] 传递给函数时的区别

difference between char str[m][n] and char *str[] when passing to function

 1. char *names[5]={"Web","Security","Software","Hello","Language"};

 2. char names[5][30]={"Web","Security","Software","Hello","Language"};

这两者有什么区别?

我知道的是 (1.) 第一个可以有所需的字符串长度,而 (2.) 第二个可以有 29 个字符的字符串 '\0'

但我很困惑,它们传递给函数时和传递方式有什么区别?

请详细说明我是 C++ 新手....

第一个不应该编译,除非你添加 constconst char *names[5] = ....

修复后,第一个是指针数组,第二个是数组数组。

如果将它们传递给函数,第一个将衰减为指向指针的指针,const char**,而第二个将衰减为指向具有 30 个元素的数组的指针,char(*)[30] .

void pointers(const char**);
void arrays(char(*)[30]);

const char *names[5]={"Web","Security","Software","Hello","Language"};
pointers(names); // Good
arrays(names); // Bad

char names[5][30]={"Web","Security","Software","Hello","Language"};
pointers(names); // Bad
arrays(names); // Good