1. char *names[5]={"Web","Security","Software","Hello","Language"};
2. char names[5][30]={"Web","Security","Software","Hello","Language"};
这两者有什么区别?
我知道的是(1.)第一个可以有所需的字符串长度,而(2.)第二个可以有29个字符的字符串' \ 0'
但我感到困惑的是,当它们被传递给函数以及它们如何被传递时会有什么不同?
请详细说明我是C ++的新手....
答案 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