定义一个结构体typedef
typedef struct student{
int no;
char name[12];
}STU1, STU2;
声明变量的时候可以使用 STU1 LIMING; STU2 LILI; STU1与STU2为student的别名
struct Student
{
int no;
char name[12];
}Stu;
声明变量时使用 struct Student LIMING 或者 struct Stu LILI;
typedef struct {
int no;
char name[12];
}STU3;
声明变量时只能使用 STU3 LIKU;
**
结构体指针内存分配
**
#include <malloc.h>
void *malloc(unsigned int num_bytes);
void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者其他数据类型)
malloc函数返回值
如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换
int *p;
p=(int*)malloc(sizeof(int)*128);
double *md= (double*)malloc(sizeof(double)*21);//分配21个double型存储单元,
char *pi;
pi=(char*)malloc(sizeof(char)*100);
if((pi=(char*)malloc(sizeof(char)*100))==NULL)
puts("Got anull pointer");
else
puts("Got avalid pointer");
指针将获取100个char类型的存储单元。
结构体指针分配内存
typedef struct
{
char *nase;
int asr;
float usi;
int sor[10];
}ty;
ty *s=NULL;
*s=(ty *)malloc(sizeof(ty));//申请内存
s->nase=(char*)malloc(sizeof(char));//结构体里面的成员指针一样需要初始化*
if(s!=null)
{
}
else
return 0;
free(s);
s=null;
ty hsy[4]={
{
"zhangdabiao",100,55.6,{10,15,88,97}
},
{
"weidayong",256,32.6,{145,175,8,59}
},
{
"zhaogang",88,99.3,{246,288,122,83}
},
{
"shanbenwushiliu",1024,66.88,{87,15,0,59}
}
};
ty *s;
s=hsy;
定义结构体数组则不需要分配内存,结构体指针指向数组的首地址。则可以直接操作指针s,
s->nase
(s+1)->nase
也可以定义一个空白的结构体数组来代替内存申请,如:
ty kuo[4]={0};
s=kuo;
赋值的时候则 如下,不能使用s++运算符号。
s->asr=256;
(s+1)->nase="hue miea nnse";
(s+2)->sor[2]=188;
指针数组
接上一例,
ty *s=nulll;
定义一个结构体指针,需要分配内存| |
则 *s[1]为指针数组,指向结构体的下一个存储单元。
结构体数组
接上一例,
ty s[20]
定义一个结构体数组,该数组有20个成员,不需要分配内存 | |
---|---|
s[1].nase="hue miea nnse";