【问题标题】:Why does the following code require initialization by a pointer?为什么下面的代码需要通过指针初始化?
【发布时间】:2015-10-23 18:32:48
【问题描述】:

当我在没有指针的情况下初始化以下数组时,收到以下错误消息:

错误:char 数组初始值设定项中的元素过多

为什么我需要用指针初始化这个数组?

const char MONTH_NAME[] ={"Jan", "Feb", "Mar", "Apr", "May", "Jun", 
 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

#include <iostream>
using namespace std;

 const char* MONTH_NAME[] ={"Jan", "Feb", "Mar", "Apr", "May", "Jun", 
 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

const char* GetOldMonthName(int month){
    if(1 <= month && month <= 12){
        return MONTH_NAME[month - 1];
    }
    return 0;
}

int main(){
    int month;

    cout << "Enter the month number." <<endl;
    cin  >> month;
    const char* name = GetOldMonthName(month);

    if(name == 0){
        cout << "That is not month." <<endl;
    }
    else{
        cout <<"The number is " << name << endl;
    }

    return 0;
}

【问题讨论】:

    标签: pointers constants


    【解决方案1】:

    在这种“非指针”形式中:

    const char MONTH_NAME[] ={"Jan", "Feb", "Mar", "Apr", "May", "Jun", 
     "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
    

    MONTH_NAME 被声明为 const char 的数组const char 的数组(当以 '\0' 终止时)也称为 C 样式字符串。但是您正在尝试使用“const char 的数组数组”(即字符串数组)来初始化此字符串。因此,一个错误。

    例如,你的初始化数组的第一个元素是"Jan",它本身就是一个const char(一个字符串)的数组。

    在另一种“指针”形式中:

    const char* MONTH_NAME[] ={"Jan", "Feb", "Mar", "Apr", "May", "Jun", 
     "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
    

    MONTH_NAME 被声明为 指向const char 的指针数组,它由代码中的 const 字符串列表正确初始化。因此,没有错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-23
      • 2015-03-04
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2011-06-08
      相关资源
      最近更新 更多