C语言结构体
C语言定义结构体
struct
{
int real;
int image;
}m_Complex;
struct Complex
{
int real;
int image;
};
定义结构体Complex 的成员
struct Complex m_Complex;
m_Complex.real = 2;
m_Complex.image = -2;
结构的数组
数组和结构体区别:数组同类数据结构体(每个构成成员必须具有相同的数据类型),结构体异类数据结构体(每个成员的数据类型可以是不相同的)
struct Complex
{
int real;
int image;
}a_Complex[5]{
{2,3},
{-7,3},
{21,9},
{42,-11},
{8,14}}
结构体指针
注意:,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加& struct Complex *p_Complex = &m_Complex; 不能写成 struct Complex *p_Complex = m_Complex; 通过指针访问结构体成员 p_Complex ->real
typedef struct Complex Complex1 ;
Complex1 m_Complex
typedef src des;
#define NUMELS 5;
**注意:**结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。
联合体(union)
union 共用体名{
成员列表
};
union val{
char key;
int num;
double price;
};
union val m_Value;
结构体和联合体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而联合体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),联合体占用的内存等于最长的成员占用的内存。联合体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。 上面union val类型的变量m_Value占用的字节长度取决于double price,8字节长度(32位机器)
C++结构体
struct Complex{
int real;
int image;
};
struct Complex{
int real;
int image;
Complex(int a,int b)
{
real = a;
image = b;
};
};
Complex m_Complex;
C语言和C++结构体的区别
C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。 C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。 C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。
参考链接:link1.
|