C++ char * 与数组 参数匹配的问题
C\C++中很强调数组和指针是不同类型.
void func(char tt[7])
{
cout<<sizeof(tt)<<endl;
cout<<" shit"<<endl;
}
void func(char * pp)
{
cout<<"char *"<<endl;
}
这2个函数 我本以为是不相同的函数,但我失败了. VS2005报重复的函数体.
sizeof(tt)的值也是4, 数组类型被抛弃了.
我想这是 数组名作为参数时自动转换成指针 是强制性的要求, 函数参数根本没法定义数组类型(只可能是指针类型?)?
所以我认为下面的2个函数也难逃法网,可编译器却认为它们是不同的函数.所以2维数组名 就没有转换的要求了?
void func( char yy[3][4])
{
cout<<sizeof(yy)<<endl;
cout<<"big shit"<<endl;
}
void func(char * yy[5])
{
cout<<sizeof(yy)<<endl;
cout<<"fuck"<<endl;
}
这2个函数可以共存.
但参数为 char * yy[5] 和 char ** y 的2个函数 却又认为是相同的函数.
此外所有的参数 sizeof()全部是4, 全部被抛弃了数组长度信息.
不知道C++标准在这方面是怎样具体规定的?
我明白因为数组没有复制函数,所以char * 和char[]最后在代码实现上是一模一样的, 但参数 char yy[3][4]又是怎么实现的? 而且函数体中其yy[2][2]是可以被正确求值的, 也即yy的数组的2维信息 3 被保留下来了.虽然sizeof还是4 =.=||
参数为数组和指针时,函数的传参数效果是一样的, 但为什么不能在函数签名上保留不同,以区别2种函数,以真正的体现出数组和指针是不同的类型. 我怎么感觉可以实现 他们为不同的函数. char[]可以只在传参数复制的时候和char *一样,但没必要函数签名 函数类型都一样.
有大牛解惑下吗?
[解决办法]
不存在数组类型的参数或返回值.
数组形参被解析成指针.
详见:
[解决办法]
数组名在函数传递时隐式转换为指针,所以函数存在二义性,所以错误
[解决办法]
void func( char yy[3][4])
void func(char* yy[5])
大哥,别说我鄙视你,这两个玩意根本不一样。
第一个是二维数组,有3个元素,每个元素是一个char [4],一共12个字节,连续存储。
第二个是一维数组,存了5个char*元素,每个4字节,一共20字节。
能重复定义的理由吗?
[解决办法]
貌似楼上各位 都说了。我来路过了