【问题标题】:Cannot convert char(*)[50] to char* in assignment无法在赋值中将 char(*)[50] 转换为 char*
【发布时间】:2013-10-26 13:32:54
【问题描述】:

这里的新手问题...为什么以下代码仅适用于一维数组而不适用于二维数组?只要它是一个 char* 指针(原样),b 是指向一维数组还是二维数组的开头,难道不应该有区别吗?我认为通用符号 [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;
}

【问题讨论】:

标签: c++ arrays


【解决方案1】:

char[50]; 是由 50 个 char 类型元素组成的数组。每个元素都有类型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

【讨论】:

    【解决方案2】:

    如果您认为 [bound1][bound2] 和 [bound1*bound2] 是等价的,您就不会创建二维数组。分配内存的大小,这就是你的乘法所暗示的,不是这里的问题,而是关于不同的数据类型:一维数组根本不是二维数组,这就是编译器告诉你的。您应该阅读有关 C++ 类型系统和类型安全的内容。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多