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++ 新手....
第一个不应该编译,除非你添加 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
1. char *names[5]={"Web","Security","Software","Hello","Language"};
2. char names[5][30]={"Web","Security","Software","Hello","Language"};
这两者有什么区别?
我知道的是 (1.) 第一个可以有所需的字符串长度,而 (2.) 第二个可以有 29 个字符的字符串 '\0'
但我很困惑,它们传递给函数时和传递方式有什么区别?
请详细说明我是 C++ 新手....
第一个不应该编译,除非你添加 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