结构体(有数组和指针)
2013-08-24 00:26
162 查看
#include <iostream>
#include <stddef.h>
using namespace std;
struct
{
int a;
char b;
float c;
} x;//创建了一个变量x,包含三个成员
/******************************************************************************************************
**这个和上面的是不同类型,不能写z = & x;
*/
struct
{
int a;
char b;
float c;
} y[20], *z;//这个声明创建了y和z。y是一个数组,包含了20个结构体。z是一个指针,指向这个类型的结构体
struct SIMPLE
{
int a;
char b;
float c;
};
struct SIMPLE x;
struct SIMPLE y[20],*z;
//这时x,y,z是同一种类型的结构变量
//**********************************************************************************************************
/*********************************************************************************************************
**使用typedef的与上面的等价
*/
typedef struct
{
int a;
char b;
float c;
} Simple;//现在Simple是一个类型
Simple x;
Simple y[20], *z;
/************************************************************************************************************
**复杂的结构成员
*/
struct COMPLEX
{
float f;
int a[20];
long *lp;
struct SIMPLE s;
struct SIMPLE sa[10];
struct SIMPLE *sp;
};
struct COMPLEX comp;
/*
**1.名字a是一个数组,表达式comp.a就选择了这个成员,这个表达式的结果是个数组名,所以可以把它用在任何可以使用
** 数组名的地方。这样便可把指针和数组等更复杂的知识用在里面
**2.类似的,成员s是个结构,所以表达式comp.s的结果是个结构的变量名,可以用在任何可以使用普通结构变量的地方。可
** 以把这个表达式用作另一个点操作符的左操作符,如comp.a.s
**3.成员sa是一个结构数组,所以comp.sa是一个数组名,它的值是一个指针常量。对这个表达式使用下标引用操作,如(comp.sa)[4]
**将选择一个数组元素,但这个元素本身是一个结构体,所以可以使用另外一个点操作符取得它的成员之一:comp.sa[4].c
**********************************************************************************************************************/
/*******************************************************************************************************************
**定义一个结构标签struct LNode来声明next
陷阱:
typedef struct
{
int data;
LNode *next;//有错误
}LNode;
*/
typedef struct lNode
{
int data;
struct lNode *next;
}LNode,*LinkList;
/*
**该结构体中的typedef只是声明LNode是个结构体类型,与解决结构体的自引用问题无关,结构体的自引用是通过标签struct LNode
**来声明next的
***********************************************************************************************************************/
int main ()
{
cout<< offsetof(struct SIMPLE,a)<<endl;
}
#include <stddef.h>
using namespace std;
struct
{
int a;
char b;
float c;
} x;//创建了一个变量x,包含三个成员
/******************************************************************************************************
**这个和上面的是不同类型,不能写z = & x;
*/
struct
{
int a;
char b;
float c;
} y[20], *z;//这个声明创建了y和z。y是一个数组,包含了20个结构体。z是一个指针,指向这个类型的结构体
struct SIMPLE
{
int a;
char b;
float c;
};
struct SIMPLE x;
struct SIMPLE y[20],*z;
//这时x,y,z是同一种类型的结构变量
//**********************************************************************************************************
/*********************************************************************************************************
**使用typedef的与上面的等价
*/
typedef struct
{
int a;
char b;
float c;
} Simple;//现在Simple是一个类型
Simple x;
Simple y[20], *z;
/************************************************************************************************************
**复杂的结构成员
*/
struct COMPLEX
{
float f;
int a[20];
long *lp;
struct SIMPLE s;
struct SIMPLE sa[10];
struct SIMPLE *sp;
};
struct COMPLEX comp;
/*
**1.名字a是一个数组,表达式comp.a就选择了这个成员,这个表达式的结果是个数组名,所以可以把它用在任何可以使用
** 数组名的地方。这样便可把指针和数组等更复杂的知识用在里面
**2.类似的,成员s是个结构,所以表达式comp.s的结果是个结构的变量名,可以用在任何可以使用普通结构变量的地方。可
** 以把这个表达式用作另一个点操作符的左操作符,如comp.a.s
**3.成员sa是一个结构数组,所以comp.sa是一个数组名,它的值是一个指针常量。对这个表达式使用下标引用操作,如(comp.sa)[4]
**将选择一个数组元素,但这个元素本身是一个结构体,所以可以使用另外一个点操作符取得它的成员之一:comp.sa[4].c
**********************************************************************************************************************/
/*******************************************************************************************************************
**定义一个结构标签struct LNode来声明next
陷阱:
typedef struct
{
int data;
LNode *next;//有错误
}LNode;
*/
typedef struct lNode
{
int data;
struct lNode *next;
}LNode,*LinkList;
/*
**该结构体中的typedef只是声明LNode是个结构体类型,与解决结构体的自引用问题无关,结构体的自引用是通过标签struct LNode
**来声明next的
***********************************************************************************************************************/
int main ()
{
cout<< offsetof(struct SIMPLE,a)<<endl;
}
相关文章推荐
- 20150418多线程、指针与数组、结构体
- 一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式
- 数组、结构体、指针4
- C语言结构体里的成员数组(长度为0)和指针---from coolshell
- C语言结构体里的成员数组和指针
- C语言结构体内含有数组,该结构体作为参数传递时需用指针,否则对数组的修改不会被记录
- C语言结构体里的成员数组和指针
- C语言之_指针数组、结构体、动态内存分配
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- Labview调用dll参数设置:结构体、指针、数组、簇
- 第22节 C语言结构体之结构体嵌套、结构体指针与结构体数组的代码实现
- 结构体初始化及结构体指针.结构体数组.结构体函数的调用赋值等
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- C语言结构体里的成员数组和指针
- C语言结构体里的成员数组和指针
- 指向结构体数组的指针 学习笔记
- C语言 结构体相关 函数 指针 数组
- C语言 结构体 数组 指针
- 结构体指针数组完成输入学生姓名学号数学语文成绩修改排序显示等功能
- C++带有指针数组的结构体转换为C#可用的结构体