cpp和c中struct用法的区别
cpp和c中struct用法的区别
c中的struct
不使用typedef
C语言中,定义struct的语法如下:
struct [<tag>] { 
    <member-list>
    <member-list>
    <member-list>
    ...
} [<variable-list>];
也可以不给这种struct起名字,只是定义变量,比如下面这样:
#include<stdio.h>
struct {
	int age;
} a;
int main() {
	a.age = 1;
	printf("a.age is %d", a.age);
	return 0;
}
也可以先起好名字,然后再通过 struct <tag> <variable-list>;声明变量。
#include<stdio.h>
struct student {
	int age;
};
int main() {
	struct student a;
	a.age = 1;
	printf("a.age is %d", a.age);
	return 0;
}
注意,这个时候,就一定要加上 struct student a;,而不能 student a;不能少打一个 struct。
如果要少打的话,只能通过 typedef struct <tag> <type>自己指定。
#include<stdio.h>
struct student {
	int age;
};
typedef struct student Student;
int main() {
	Student a;
	a.age = 1;
	printf("a.age is %d", a.age);
	return 0;
}
更绝的是,typedef struct <tag> <type>里,<type>和 <tag>可以同名。
比如定义了一个student的tag,可以通过 typedef struct student student;,这样也是合法的。
#include<stdio.h>
struct student{
	int age;
};
typedef struct student student;
int main() {
	student a;
	struct student b;
	a.age = 1;
	b.age = 2;
	printf("a.age is %d\n", a.age);
	printf("b.age is %d\n", b.age);
	return 0;
}
使用typedef
typedef如果遇上了 struct {balabala},那就和定义变量没有任何关系了,就是纯粹的换名字。
typedef struct [<tag>] {
	<member-list>
	...
	<member-list>
} <type>;
用了typedef后,既可以通过 struct <tag> <var>;的方式声明变量,也可以通过 <type> <var>;的方式声明变量。
#include<stdio.h>
typedef struct student{
	int age;
} Student;
int main() {
	Student a;
	struct student b;
	a.age = 1;
	b.age = 2;
	printf("a.age is %d\n", a.age);
	printf("b.age is %d\n", b.age);
	return 0;
}
这样的设计,真是让人吐槽。好的语言应该只有一种写法。
cpp中的struct
cpp里,当使用如下的语法来定义一个 struct tag时
struct [<tag>] { 
    <member-list>
    <member-list>
    <member-list>
    ...
} [<variable-list>];
既可以像c语言那样通过 struct <tag> <var>;来声明一个变量,
也可以不用写 struct,而是通过 <tag> <var>来声明一个变量。
#include <iostream>
using namespace std;
struct student {
	int age;
};
int main() {
	student m;
	struct student n;
	m.age = 1;
	n.age = 2;
	cout << "m.age is " << m.age << endl;
	cout << "n.age is " << n.age << endl;
	return 0;
}

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号