C++中结构体详解及mem* 内存操作函数

来源:互联网 发布:c语言中什么叫关键字 编辑:程序博客网 时间:2024/04/27 22:01

1、结构体的声明:struct 结构体名[可省]{成员列表}变量列表[可省](多个变量用逗号隔开);

例1:struct Employee

{

char strEmpID[10];

……

}Emp;  //Emp结构体变量

例2struct Employee

{

char strEmpID[10];

……

};  //缺省

struct Employee Emp;//定义属于Employee 的结构体变量

3struct {

char strEmpID[10];

……

  }Emp;  //该法只能在创建结构体时定义该结构体的变量,此法适用性较差

2、目前一般用下述定义方法:

typedef struct Employee[可省]

{

   成员列表

}Emp,*pEmp;  //Emp为类型,pEmp为指针;均是结构体名,而非变量。

Emp e2; //e2为结构体变量

pEmp e3=NULL;  //等价于Employee* e3=NULL

e3=&e2;

strcpy(e3->strEmpID,”1000”); //对第0个位置赋值

strcpy((e3+1)->strEmpID,”1002”); //”1002”表示长度为5(e3+1)e3[1] ,对第1个位置赋值

typedef  Employee Emp;

typedef  Employee* pEmp;

e3=( Employee*) malloc(10*sizeof(Employee));

free(e3); //malloc 必须与free对应,否则会造成资源泄漏

e3=new Employee[10]; //10个空间

delete[] e3;

3、结构体变量引用

同类结构体变量可以互相直接赋值,如Emp e1,e2; e1 = e2;

非指针变量用"."来使用结构体成员变量,如e1.strEmpID;在指向结构体变量的指针变量中使用 "->"。即有:结构体名.成员名 <=> p->成员名 <=>(*p).成员名。

4结构体初始化:

可选择针对某个结构体变量的成员逐个进行初始化,或者对整个结构体变量初始化。但整体初始化只能在定义结构体变量的时候进行。例:

struct  aa{

  int a;

  int b;

 }test1={1,2},test2={3,4};

 struct aa test3={4,6};

对于单个成员赋值只需用:" 结构体变量名.成员名 =  ;"

5结构体变量可为数组,如:

struct  aa{

  int a;

  int b;

 }aaa[3];

         mem* 内存操作函数

(1) 内存之间拷贝字符

void * memcpy(void *dest,const void *src,size_t count);

(2) 给内存块设定特定的字符值

void *memset(void *dest,int c, size_t count); // dest表示内存块地址

eg: memset(&e1,0,sizeof(Employee)); //0

3)拷贝字符,遇到C停止且返回dest或拷贝个数为count停止

void *_memcpy(void *dest,const void *src,int c,unsigned int count);

eg: void main()

{int n;

int nsrc=100;

memcpy(&n,&nsrc,sizeof(int));

Employee e1;

strcpy(e1.strEmpID,”1000”);
Employee e2;

memcpy(&e2,&e1,sizeof(Employee));  //e2=e1  Employee中含指针时就不可以了;此外e1为指针时不用&

}

 

原创粉丝点击