【问题标题】:Why an int* array can't be initialized directly but char* array can be?为什么 int* 数组不能直接初始化,而 char* 数组可以?
【发布时间】:2014-11-07 10:33:39
【问题描述】:

为什么int*数组不能直接初始化,而char*数组可以? 我知道它们不一样,但是导致这种情况发生的确切区别是什么(请解释原因)?

我知道为什么不能直接初始化int* p[]
不知道char* name[]怎么可能?

例如:

char* name[] = { "Mostafa Chamran", "Mehdi Zeinoddin", "Ebrahim Hemmat" };

int* p[3] = {1, 2, 3};

给出错误:无效转换

我不知道要搜索什么才能找到相关问题,所以我不知道是否存在相同的问题

【问题讨论】:

  • 因为"string literal like this"const char * 但数字常量不是int *s
  • 根据 T.J. Crowder 他们是 const char (no *)
  • const char[]const char * 相同。只是在声明变量的时候不同
  • @user3783574:字符串文字是const char[x],而不是const char。例如,"foo"const char[4]const char[z] 可转换为 char*
  • @user3783574: const char[x] 不是 char *,但可以隐式转换为它(“隐式”=“没有实际写一些东西说'做这个转换')。

标签: c++ arrays pointers


【解决方案1】:

您为p 提供的条目不是int* 条目,它们是int 条目,因此类型不正确(int 不是int*)。您为name 条目提供的string literalsconst char [x](其中x 是文字*的长度),可以隐式转换为char*,因此类型是可接受的并且有效.

由于您的pint* 的数组,因此条目必须是int* 或隐式可转换为它,就像char*name 数组的条目可隐式转换为char* .


(* "foo"const char[4],例如——'f''o''o''\0'。)

【讨论】:

    【解决方案2】:

    后一个表达式是一个指针数组。该错误表明您正在将 int 转换为 int*。

    表达式应该是

    int arr[3]={1, 2, 3};
    

    【讨论】:

    • 我知道,但是 char* 名称呢?为什么它可以包含文字?但是 int* p 不能保存数字?我的意思是为什么 char* 可以保存文字但 int* 不能保存数字而不是它们与数字一样?
    • @user3783574:因为the type of a string literal is "array of const char",可以隐式转换为char*
    猜你喜欢
    • 2017-09-19
    • 2021-05-18
    • 2023-04-01
    • 2019-04-09
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2012-01-07
    • 2015-09-25
    相关资源
    最近更新 更多