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

时间:2015-04-28 13:29:51

标签: c++ string char

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

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

这两者有什么区别?

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

但我感到困惑的是,当它们被传递给函数以及它们如何被传递时会有什么不同?

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

1 个答案:

答案 0 :(得分:3)

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

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

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

即,

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