#include
struct stu
{
int a;
}stu1;
stu1={5};
int main()
{
struct stu *p;
p=&stu1;
printf("%d",p->a);
}
为什么会报错
赋值与初始化是两个概念,初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而已一个新值来替代。赋值是语句,而初始化是在定义中的,定义和声明不是语句,语句是要在函数中才被执行的。修改如下,供参考:
#include<stdio.h>
struct stu
{
int a;
}stu1; //这里是声明、定义了一个结构体和一个结构体变量
//stu1 = { 5 }; 这是赋值语句,语句是要在函数中执行的,所以这句应移动到 main()函数中才被执行。
int main()
{
stu1 = { 5 };
struct stu* p;
p = &stu1;
printf("%d", p->a);
}
1.stu1 ={5}修改为stu1 stu2={5};
2.p=&stu2;
因为stu1是一个结构体类型,不是一个具体参数!
通过查阅一些资料了解到:
计算机不可能产生真正的随机数。在这里,我们使用的随机数是将随机数种子(srand函数介绍的参数)作为初始条件,经过一定的计算产生的。
这么说可能会有一点难以理解,我们来举个游戏中的例子:
比如LOL就有一套独立的伪随机机制,以25%暴击举例,如果蛮王第一刀没暴击,第二刀也没暴击,第三刀还是没暴击,那么第四刀暴击的几率就会大大的提升(不是25%),相信很多玩游戏的同学都会有这种体会,这里的暴击就是一个伪随机数。
可能导致结构体变量初始化报错的原因有以下几种:
结构体成员变量没有初始化
结构体成员变量的顺序不正确
声明结构体时没有使用typedef
使用了不合适的数据类型来初始化结构体成员变量
为了解决这个问题,我们需要对结构体的成员变量进行初始化。下面是一些实现方法的示例:
struct Student {
int id;
char name[20];
float score;
};
int main() {
struct Student stu = {1, "Tom", 90.5};
return 0;
}
struct Student {
int id;
char name[20];
float score;
};
int main() {
struct Student stu;
memset(&stu, 0, sizeof(struct Student));
stu.id = 1;
strcpy(stu.name, "Tom");
stu.score = 90.5;
return 0;
}
typedef struct {
int id;
char name[20];
float score;
} Student;
int main() {
Student stu = {1, "Tom", 90.5};
return 0;
}
typedef struct {
int id;
char name[20];
float score;
} Student;
Student init_student(int id, char* name, float score) {
Student stu;
stu.id = id;
strcpy(stu.name, name);
stu.score = score;
return stu;
}
int main() {
Student stu = init_student(1, "Tom", 90.5);
return 0;
}
需要注意的是,结构体成员变量只能按照定义时的顺序初始化,在给成员变量赋值时也应按照相应的顺序。同时,结构体的成员变量也有不同的数据类型,需要使用相应的