将指针分配给数组不起作用,但相反可以

时间:2018-07-31 10:45:35

标签: c++ arrays pointers

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

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

获取编译错误:

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

为什么?

2 个答案:

答案 0 :(得分:3)

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

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

此外,文字字​​符串(在第二种情况下在var data = [ { "Id": 1, "sku": "abc", "name": "Abbey Black Round Glass and Chrome 3 Tier Stand", "qty": 14 }, { "Id": 3, "sku": "abc", "name": "Ammy Black Glass and Chrome 5 Tier Corner Stand", "qty": 0 }, { "Id": 4, "sku": "abc", "name": "Barcelona Adjustable Gas Lift Black Bar Stool (Set of 2)", "qty": 23 } ]; var res = data.map(({sku, qty}) => ({sku, qty})); console.log(res);的初始化中使用)是恒定字符数组,这意味着您不能将非恒定指针指向文字字符串。您必须使用c


关于在第一种情况下它为何起作用的原因,首先数组const char*不是常数,因此不需要指向a的指针。其次,当使用数组时,它可以衰减到指向其第一个元素的指针。

所以定义:

const

确实是这样:

char* c = a;

答案 1 :(得分:-1)

因为

char *c 

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