【问题标题】:Assigning a pointer to an array in not working but the reverse is fine分配一个指向数组的指针不起作用但反过来很好
【发布时间】:2018-07-31 10:45:34
【问题描述】:

a中的值被复制到c指针中:

char a[] = "I am ok";
char *c = a;

得到编译错误:

char *c = "I am ok";
char a[] = c;

为什么?

【问题讨论】:

  • 错误说明了什么?
  • 第二个例子中的两个语句都应该给你一个错误。
  • "a 中的值被复制到 c 指针中。" - 不是。
  • error C2440: 'initializing': cannot convert from 'char *' to 'char []' 注意:没有对数组类型的转换,尽管有对数组的引用或指针的转换跨度>

标签: c++ arrays pointers


【解决方案1】:

只能使用aggregate initialization 初始化数组(在第一种情况下使用文字字符串的特殊情况)。

根据语言,第二种情况的初始化部分根本不正确。

此外,文字字​​符串(在第二种情况下用于 c 的初始化)是 constant 字符数组,这意味着您不能创建指向文字的非常量指针细绳。您必须使用const char*。


至于为什么它在第一种情况下起作用,首先数组a不是常量,所以不需要指向const的指针。其次,当使用数组时,它可以衰减指向其第一个元素的指针。

所以定义:

char* c = a;

真的是这样的:

char* c = &a[0];

【讨论】:

    【解决方案2】:

    因为

    char *c 
    

    是指针的声明,而不是它的内容,它只能由地址初始化

    【讨论】:

      猜你喜欢
      • 2013-01-29
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      • 2011-01-03
      • 2011-04-02
      • 2015-12-10
      • 2020-11-22
      相关资源
      最近更新 更多