2015-04-28 62 views
0
1. char *names[5]={"Web","Security","Software","Hello","Language"}; 

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

这两个有什么区别?char str [m] [n]和char * str []当传递到函数时的区别

一个我知道的是,(1)第一个可以具有期望的字符串的长度,而(2)第二个可以有支路29个字符“\ 0”

但我很困惑什么区别当他们被传递到功能,以及他们如何通过?

请详细说明一下我新的C++ ....

+1

那么第一个不编译,因为字符串文字'const'。 – Quentin

+0

第一个是分配'5 * sizeof(char *)'字节,它在每个索引处存储一个指针,而第二个分配'5 * 30'字节并在那里保存字符串。附:这是C. – rev

+0

警告:不推荐将字符串常量转换为'char *'[-Wwrite-strings] |它编译了但是有了这个警告,能否请你解释一下Quentin – CodeLearner

回答

3

第一个不被编译,除非你添加一个const; const 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 
相关问题