结构体声明时不能初始化吗
时间: 2023-07-21 09:34:18 浏览: 158
c++能不能给类的成员变量在声明的时候初始化? - life_limbo - 博客园1
在C语言中,结构体声明时不能直接为结构体成员赋初值。结构体只能在定义时进行初始化,或者在定义后通过结构体变量的方式进行赋值。
例如,以下代码是错误的:
```c
// 错误的结构体声明语法
struct person {
char name[20] = "John";
int age = 25;
char gender = 'M';
};
int main() {
struct person p1;
return 0;
}
```
在上面的代码中,尝试在结构体声明时为结构体成员赋初值,但这是不合法的语法,会导致编译错误。
如果需要为结构体成员赋初值,可以通过以下两种方式实现:
1. 在结构体定义时使用结构体初始化语法为结构体变量赋初值,如前一问所示。
2. 在定义结构体变量后,通过结构体变量的方式为结构体成员赋初值。例如:
```c
struct person {
char name[20];
int age;
char gender;
};
int main() {
struct person p1;
p1.name = "John";
p1.age = 25;
p1.gender = 'M';
return 0;
}
```
在上面的代码中,先定义了一个名为`p1`的结构体变量,然后通过结构体变量的方式为结构体成员赋初值。注意,这里不能使用字符串常量直接赋值给字符数组类型的成员,需要使用字符串库函数进行赋值,或者使用字符数组类型的初始化语法进行赋值。
阅读全文