C++里面能不能直接给结构体赋值?

来源:百度知道 编辑:UC知道 时间:2024/09/22 10:38:08
比如
struct {
int x, y;
} a;

我指的是,能不能直接用这条语句给结构体赋值?
a = {1, 2};
我试了编译但没通过,但是数据结构的书上有这条语句。到底能不能用那条语句来给结构体赋值的啊?

数据结构的书经常都会写一些伪代码,而且那条语句是否可行也和编译器有关。。

楼主,这是编译器的问题。你的编译器不支持对一个结构体型的自动(automatic)变量内部的域进行一次性初始化。在这样的编译环境下,任何类似
struct s1 b = { "hello", 1, &b };
这样的初始化的语句都是非法的。TC确实不允许这样的初始化, TC++里面编译这样的C代码也不行,看来Borland的开发者们还是忠于的早期的C风格。LCC看来也不支持。早期的C以及ANSI C中是不允许对结构体型的自动变量进行一次性初始化的,要进行一次性初始化,除非你把你需要的struct变量声明为静态(static)变量,或全局变量(全局变量被默认为静态类型)。所以在所有函数外,你只要写
struct s1 b = { "hello", 1, &b };就可以,但是在一个函数内部你就要写成
static struct s1 b = { "hello", 1, &b };
(我已经在TC里面调试过了,加上static就可以通过了)
如果你在函数内部没有把b声明为静态变量,你要初始化就必须要写出三条初始化语句,分别对结构体内部的三个域进行初始化。
struct s1 b;
b.s = "hello";
b.i = 1;
b.sip = &b;

数据结构更关注算法的描述,有时候使用的是伪语言,计算机无法识别的
当然可以了,只不过要初始化,而不是赋值,这样可以
struct {
int x, y;
} a={1,2};

初始化的时候可以.
struct { int x, y; } a = { 1, 2 };

struct {
int x, y;
} a={1,2};
这样可以 ,只有赋初值时可以这样

我发现这两种做法都是可以的。一:
struct {
int x, y;
} a={1,2};
二:
s