在赋值时无法将char(*)[50]转换为char *

时间:2013-10-26 13:32:55

标签: c++ arrays

这里有新手问题...为什么下面的代码只适用于1D数组但不适用于2D数组? b是否指向1D数组或2D数组的开头不应该没有区别,只要它是char *指针(就像它)?我认为通用符号[bound1] [bound2]相当于[bound1 * bound2],即使在赋值操作上也是如此。帮助

main() //this works fine 
    {
        char *b;
        b = new char[50];
        return 0;
    }

main() //but this raises the error "Cannot convert char(*)[50] to char* in assignment"
{
    char *b;
    b = new char[50][50];
    return 0;
}

2 个答案:

答案 0 :(得分:1)

char[50];是包含char类型的50个元素的数组。每个元素都有char类型。因此new char[50];返回指向第一个元素的指针:char * - 指向char的指针。

char[50][50]不是char的数组。它是数组的数组。每个元素都有char[50]类型。因此new char[50][50];返回指向第一个元素的指针:char (*)[50] - 指向char[50]的指针。

以这种方式声明b

char (*b)[50];

测试:http://ideone.com/1zJs1O

答案 1 :(得分:0)

如果你对[bound1] [bound2]和[bound1 * bound2]是正确的,你就不会创建一个2D数组。分配内存的大小,这是你的乘法所暗示的,这不是问题,它是关于不同的数据类型:一维数组根本不是一个二维数组,这就是编译器告诉你的。您应该阅读有关C ++类型系统和类型安全性的信息。

What is type safety and what are the "type safe" alternatives?