#include<stdio.h>
struct stu{
int age;
};
int main(){
stu st;
st.age=5;
printf("%d",st.age);
}
第六行不写struct stu st也可以运行,震惊了
c语言 , 你这个会编译报错的
而你这个 是 cpp文件,也就是按c++编译的, c++兼容了 c语言语法, c++ 中 这种结构体 跟类使用上是一样的,所以可以像类一样直接使用
没啥好震惊的,兄die。
C语言中结构体变量的定义有两种方式:
struct stu{
int age;
};
struct stu st; //定义结构体变量st
struct stu{
int age;
};
stu st; //定义结构体变量st,不使用struct关键字
两种方式在C语言中都是合法的,编译都可以通过。
区别在于:
能运行,运行的是之前编译出来的exe吧,你重新编译试试会报错。
不知道你这个问题是否已经解决, 如果还没有解决的话:struct是用来声明结构体类型的关键字。
struct 是个神奇的关键字,它将一些相关联的数据打包成一个整体,方便使用。在网络协议、通信控制、嵌入式系统、驱动开发等地方,我们经常要传送的不是简单的字节流(char 型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体。
经验不足的开发人员往往将所有需要传送的内容依顺序保存在 char 型数组中,通过指针偏移的方法传送网络报文等信息。这样做编程复杂,易出错,而且一旦控制方式及通信协议有所变化,程序就要进行非常细致的修改,非常容易出错。这个时候只需要一个结构体就能搞定。
在C语言中,正常情况下,在定义结构体变量时需要加上"struct"关键字,因为结构体是一种用户自定义的数据类型。但是在C语言中,如果省略"struct"关键字,可以直接使用结构体标签作为类型名进行变量的定义,也可以直接定义结构体类型和变量。
例如,参考资料中的第一种方式就是标准的结构体定义方式:
struct student
{
int age;
float score;
char sex;
};
int main ()
{
struct student a={23, 98, 'f'};
printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );
return 0;
}
在这种方式下,可以看到在定义结构体变量a时,前面有写明"struct student",这是符合正常的语法规范的。在其他的三种方式中,省略"struct"关键字的用法是不符合C语言的语法规范的。
总的来说,如果在定义结构体变量时省略"struct"关键字,实际上编译器会将其视为一种类型定义,该类型的名称就是结构体标签。所以,这种用法与上述标准定义方式等效,定义的变量类型就是对应的结构体类型。
但是需要注意,这种省略"struct"关键字的用法在可读性上是较差的,不符合编码规范。在实际开发中,建议还是按照标准定义方式来定义结构体变量,即明确写明"struct"关键字。
如果你在程序中发现可以省略"struct"关键字而程序仍然能够正常运行,那可能是编译器的一种默认行为或者各种编译器的编译特性之一。但是不能因此认为这种用法是正确的或者合理的。
确保程序的正确性和可读性,你应该按照标准的定义方式来定义结构体变量,即明确写明"struct"关键字,这样可以避免一些编译器和可移植性的问题。
总结起来,没有写"struct"关键字的情况下,定义的变量类型将是对应的结构体类型,但这种用法不符合C语言的编码规范,不推荐使用。在实际开发中,建议按照标准的定义方式来定义结构体变量,即明确写明"struct"关键字。