C++中用new创建结构体指针,赋初值不合法?

# include <iostream>

struct CandyBar
{
char brand[20];
float weight;
int calori;
};
using namespace std;

int main()
{
CandyBar *ps = new CandyBar [3];
*(ps[0]) = {"bao fu", 2, 3};//这样赋值为啥说不合法啊?
*(ps[1]) = {"chen chen", 3, 4};
*(ps[2]) = {"fu fu", 4, 5};

cout << "The member in struct pointer ps[0] are: \n";
cout << "ps[0]->brand: " << ps[0]->brand << endl;
cout << "ps[0]->weight: " << (*ps[0]).weight << endl;
cout << "ps[0].calori: " << ps[0]->calori << endl << endl;
delete [] ps;
return 0;
}

在C++中,{...}这种形式不是结构的常数形式,而是初始化的一种写法。这种写法只能用于初始化。

虽然赋值和初始化在C++里面可以用=,但是语法上有差异。

这样写可以:
CandyBar cb = {"hi", 0.5, 1};
这样写就不行:
CandyBar cb;
cb = {"hi", 0.5, 1};
因为前者是初始化,后者是赋值。

语法就是这样规定的。可能最初规定的时候应该是有原因的,但现在已经不可考。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-02-26
你搞错了,ps指的是一个地址,那么*ps指的是地址的值,注意啦:ps[0]指的是ps首地址指的值,而不是一个地址,明白这句话了很自然就可以理解,为什么*(ps[0])不能赋值了。
第2个回答  2009-02-26
字符串类型的赋值要用strcpy,
例如strcpy(brand," ")
不过要加上#include<string.h>
第3个回答  2009-02-26
CandyBar *ps = new CandyBar [3]; 定义方法不对

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网