结构体的几个问题

密斯刘 2009-07-22 01:44:34
第一个 结构体的成员数据可以在定义的时候初始化吗?我在DEV C++里说 好像是要用static类型


struct Student
{
char num[30];
int score = 0; //这里就报错
int n ;
int question[11];
};

第二个 要是想要交换两个形同结构体类型的数据,只能一个一个成员数据的交换吗?有没有更好的方法?
谢谢
...全文
399 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
密斯刘 2009-12-15
  • 打赏
  • 举报
回复
谢谢大家 不好意思拖了那么久 结贴来了
lwjxtx 2009-07-29
  • 打赏
  • 举报
回复
项下
steven_007 2009-07-29
  • 打赏
  • 举报
回复
顶1-2楼
zhaohongbo83 2009-07-29
  • 打赏
  • 举报
回复
不可以在这样初始化结构体成员。

xuruiyi 2009-07-29
  • 打赏
  • 举报
回复
第二个 要是想要交换两个形同结构体类型的数据,只能一个一个成员数据的交换吗?有没有更好的方法?

如果是形同就可以直接赋值
例如:struct A,B;
那么可以B = A;
如果形不同,那么不能够直接赋值,可以用memcpy完成
ysysbaobei 2009-07-29
  • 打赏
  • 举报
回复
顶下
Synpeace 2009-07-28
  • 打赏
  • 举报
回复
第一个:数据成员可以在定义的时候初始化。
做法如下:

class Student
{
char num[30];
int score;
int n ;
int question[11];

const int student_id; // 学号

public:
Student(int id) : score(0), student_id(id) { // 使用成员初始化列表。
score = 0; // 这种方法也可以,不过对于常量就没办法了。
//student_id = id; // 编译错误
}
};


第二个:其实在OOP中,一个类相当于是一个内置类型,可以直接用 = 来赋值的。
比如:

#include <utility>

class C2 {
double fsafsa;
float fdas;
};

class C1 {
private:
int a, b, c, d;
bool e[100];
Complex* pNext;
C2 subclass;
};

int main() {
C1 c;
C1 b;
c = b; // 虽然这些数据成员都是私有的,但此处编译并没有问题。
std::swap(c, b); // 使用了STL中的函数,实现了交换数据。

// 也可以不用STL中的函数:
{
C1 temp;
temp = c;
c = b;
b = temp;
} // 这看起来相当啰嗦
}


像这种大型的数据类型交换起来是比较累的,一般都是交换指针或交换引用来达到更好的效果。
DCMorgan 2009-07-28
  • 打赏
  • 举报
回复


struct stStudent // 声明结构体
{
char num[30];
int score;
int n ;
int question[11];
};
struct stStudent Student={"", 0, 0, {0}}; // 定义结构体变量


第一个,这样就不会报错了。结构体只是一个模板,不要将其赋值。
结构体的使用,先声明结构体(此时不能赋值),再定义结构体变量(此时可以初始化)。
Semantic_smq 2009-07-28
  • 打赏
  • 举报
回复
对于第一个,是不可以的,因为在定义结构体的数据成员时,并没有为其分配内存,是不能进行初始化的,只有在定义了结构体数组之后,才会为其分配内存。
Cloud__Apex 2009-07-28
  • 打赏
  • 举报
回复
人家可能是刚从 C过来的吧,这种问题 你呢就把 struct 当成 class 来用就行了
积极的猫咪 2009-07-28
  • 打赏
  • 举报
回复
哎,这都属于没事找抽型的,没事研究研究机器语言那,研究个这!牛人!!!!
amossavez 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xyz200406 的回复:]
结构体成员好像不能把!
c++里的类的构造函数可以!
[/Quote]
你这是c的用法,他们说的是c++的用法
lightLinux 2009-07-24
  • 打赏
  • 举报
回复
第一个问题:
struct Student
{
char num[30];
int score ;
int n ;
int question[11];
Student()
{
memset(num, 0, 30);
score = 0;
n = 0;
memset(question, 0 , 11);
}
};
第二个问题:

Student A;
Student B;
B = A;
qinlang007 2009-07-24
  • 打赏
  • 举报
回复
我们老师说,结构体最好不要和类混为一谈。标准C的结构体是不支持第一种用法,所以尽量不要去用。既然你要用,为什么不干脆声明成一个类呢。
elemem 2009-07-24
  • 打赏
  • 举报
回复
memcpy 需要包含哪个头文件?
jack_tsui 2009-07-24
  • 打赏
  • 举报
回复

memset(&S_student,0,sizeof(Student));

jack_tsui 2009-07-24
  • 打赏
  • 举报
回复
我就比较喜欢这样,直接对整个结构进行初始化


struct Student
{
char num[30];
int score ;
int n ;
int question[11];
}S_student;

memset(&S_student,0,sizeof(S_student));


周成风 2009-07-24
  • 打赏
  • 举报
回复
结构体就是类,只不过访问权限默认为public,而类默认为private

交换的话可以使用memcpy,需要注意的和类中重载 = 是一样的,是否有指针等。
winingsky 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ljt3969636 的回复:]
交换的话可以定义一个函数嘛,一劳永逸.

C/C++ codevoid f(Student&a,Student&b)
{int temp;

temp=a.n;
a.n=b.n;
b.n=temp;
.......交换数组
}
[/Quote]
up
wlwshang 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ljt3969636 的回复:]
结构体和类是一样的,只是结构体的成员默认全是public,
只有const static int score = 0;才能在类中初始化//正解
[/Quote]


加载更多回复(11)

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧