#include <stdio.h>
main()
{
struct list
{
int number;
char name;
}list2;
list2={3,'D'};
printf("%c\n",list2.name);
}
=========================
这里面的list2={3,'D'};这句提示错误。问了问也没找到解决办法,发帖问问吧。
当然我可以这样写:
#include <stdio.h>
main()
{
struct list
{
int number;
char name;
}list2={3,'D'};
printf("%c\n",list2.name);
}
或者
#include <stdio.h>
main()
{
struct list
{
int number;
char name;
};
struct list list2={3,'D'};
printf("%c\n",list2.name);
}
这两种写法都没错。但为什么刚开始的那种写法提示错误呢?
错误的代码为:
--------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------
检查文件依赖性...
正在编译 C:\Users\cike\Desktop\testing\jiegouti\jiegouti.cpp...
[Error] C:\Users\cike\Desktop\testing\jiegouti\jiegouti.cpp:13: error: expected primary-expression before '{' token
[Error] C:\Users\cike\Desktop\testing\jiegouti\jiegouti.cpp:13: error: expected `;' before '{' token
构建中止 jiegouti: 2 个错误, 0 个警告
8 个解决方案
#1
初始化怎么会是{}呢?
#2
你指的是哪一个?
#3
这样写是可以的:
这样写也是可以的:
#include <stdio.h>
int main(int argc, char** argv)
{
typedef struct LIST
{
int number;
char name;
}AList;
AList LIST2 = {3,'D'};
printf("%c\n",LIST2.name);
}
这样写也是可以的:
#include <stdio.h>
int main(int argc, char** argv)
{
struct LIST
{
int number;
char name;
}LIST2 = {3,'D'};
printf("%c\n",LIST2.name);
}
#4
总结一下:
struct LIST list1 = {3, 'D'}; // OK
// 但是下面这样就不行:
struct LIST list2;
list2 = {3, 'D'};
// 这个和数组初始化时一回事情,比如:
char a[2] = {'A', 'B'}; // OK
char b[2];
b = {'A', 'B'}; // NOT OK!!!
#5
这个意思就是说,声明的时候直接初始化的时候是可以的
但是,不和声明一起,就是赋值,而C是只能单变量赋值的
#6
结构体数组 开始声明的时候初始化可以整体赋值
例如 a[3]={3,4,5};
如果你写成 int a[3];
a[3]={3,4,5}这就错了 ,编译器会找不到a[3];
结构体也一样只有在声明定义结构体的时候可以整体赋值,其他时候只能单个赋值了
你上面那个 改成
struct list
{
int number;
char name;
}list2;
list2.name = ‘d’;
list2.number = 3;
还有一般定义一个结构体类型的时候还不要起名字好点,功能单独开 代码看起来比较明朗
例如 a[3]={3,4,5};
如果你写成 int a[3];
a[3]={3,4,5}这就错了 ,编译器会找不到a[3];
结构体也一样只有在声明定义结构体的时候可以整体赋值,其他时候只能单个赋值了
你上面那个 改成
struct list
{
int number;
char name;
}list2;
list2.name = ‘d’;
list2.number = 3;
还有一般定义一个结构体类型的时候还不要起名字好点,功能单独开 代码看起来比较明朗
#7
#8
我觉得应该是结构体和数组是一样的道理。数组名和结构体变量名代表的是该数组或者结构体的首地址,是一个确定的唯一地址,由系统分配。在定义以后初始化其实是将几个常量分配给这个唯一的首地址里,这是不能实现的,所以系统报错。而在定义的时候直接初始化,那时候的“=”代表的并不是赋值的意思,而是代表初始化。
#1
初始化怎么会是{}呢?
#2
你指的是哪一个?
#3
这样写是可以的:
这样写也是可以的:
#include <stdio.h>
int main(int argc, char** argv)
{
typedef struct LIST
{
int number;
char name;
}AList;
AList LIST2 = {3,'D'};
printf("%c\n",LIST2.name);
}
这样写也是可以的:
#include <stdio.h>
int main(int argc, char** argv)
{
struct LIST
{
int number;
char name;
}LIST2 = {3,'D'};
printf("%c\n",LIST2.name);
}
#4
总结一下:
struct LIST list1 = {3, 'D'}; // OK
// 但是下面这样就不行:
struct LIST list2;
list2 = {3, 'D'};
// 这个和数组初始化时一回事情,比如:
char a[2] = {'A', 'B'}; // OK
char b[2];
b = {'A', 'B'}; // NOT OK!!!
#5
这个意思就是说,声明的时候直接初始化的时候是可以的
但是,不和声明一起,就是赋值,而C是只能单变量赋值的
#6
结构体数组 开始声明的时候初始化可以整体赋值
例如 a[3]={3,4,5};
如果你写成 int a[3];
a[3]={3,4,5}这就错了 ,编译器会找不到a[3];
结构体也一样只有在声明定义结构体的时候可以整体赋值,其他时候只能单个赋值了
你上面那个 改成
struct list
{
int number;
char name;
}list2;
list2.name = ‘d’;
list2.number = 3;
还有一般定义一个结构体类型的时候还不要起名字好点,功能单独开 代码看起来比较明朗
例如 a[3]={3,4,5};
如果你写成 int a[3];
a[3]={3,4,5}这就错了 ,编译器会找不到a[3];
结构体也一样只有在声明定义结构体的时候可以整体赋值,其他时候只能单个赋值了
你上面那个 改成
struct list
{
int number;
char name;
}list2;
list2.name = ‘d’;
list2.number = 3;
还有一般定义一个结构体类型的时候还不要起名字好点,功能单独开 代码看起来比较明朗
#7
#8
我觉得应该是结构体和数组是一样的道理。数组名和结构体变量名代表的是该数组或者结构体的首地址,是一个确定的唯一地址,由系统分配。在定义以后初始化其实是将几个常量分配给这个唯一的首地址里,这是不能实现的,所以系统报错。而在定义的时候直接初始化,那时候的“=”代表的并不是赋值的意思,而是代表初始化。