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

来源:百度知道 编辑:UC知道 时间:2024/06/07 22:51:23
# 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};
因为前者是初始化,后者是赋值。

语法就是这样规定的。可能最初规定的时候应该是有原因的,但现在已经不可考。

你搞错了,ps指的是一个地址,那么*ps指的是地址的值,注意啦:ps[0]指的是ps首地址指的值,而不是一个地址,明白这句话了很自然就可以理解,为什么*(ps[0])不能赋值了。

字符串类型的赋值要用strcpy,
例如strcpy(brand," ")
不过要加上#include<string.h>

CandyBar *ps = new CandyBar [3]; 定义方法不对