结构体
声明一个结构体类型的一般形式为:
struct 结构体名 {成员表列}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
char name[20];
int age;
char sex;
char z;
};
int main()
{
/* struct student s1={"aaa",10,'m'};
struct student s2;
scanf("%s%d %c",s2.name,&s2.age,&s2.sex);
printf("%s %d %c\n",s1.name,s1.age,s1.sex);
printf("%s %d %c\n",s2.name,s2.age,s2.sex);*/
/* struct student *s3=(struct student*)malloc(sizeof(struct student));
strcpy(s3->name,"aaa");
s3->age=10;
s3->sex='m';
printf("%s %d %c\n",s3->name,s3->age,s3->sex);*/
printf("%d",sizeof(struct student));
return 0;
}
#include<stdio.h>
#include<stdlib.h>
struct student
{
char name[20];
int age;
char sex;
};
int main()
{
int i;
struct student *stu[5];
for(i=0;i<5;i++)
{
stu[i]=(struct student*)malloc(sizeof(struct student));
scanf("%s%d %c",stu[i]->name,&stu[i]->age,&stu[i]->sex);
}
for(i=0;i<5;i++)
{
printf("%s%d %c",stu[i]->name,stu[i]->age,stu[i]->sex);
}
return 0;
}
//1.结构体的总长度一定是最长成员的整数倍;
//2.每个成员的偏移量,一定是该成员长度的整数倍。
内存管理
系统会为一个进程分配4GB的虚拟内存,通常情况下,1GB为内核态,由内核使用,3GB为用户态,用户态由以下5部分组成
数据段:存放全局变量、static静态变量
代码段:存放代码、常量,为只读模式
栈空间:存放局部变量
.堆空间:mollac申请,free释放
(进程间共享的内存通信等)
3.堆和栈的区别
栈:操作系统管理,申请释放都是操作系统完成
堆:用户管理,申请(malloc)和释放(free)由用户完成
#include<stdio.h>
#include<stringh>
#include<stdlib.h>
int global=0;
char *p1;
int main()
{
int a;
char s[]; //s++ 错误;(*a)++正确;数组是常指针。
char *p2;
char *p3="123456789";//只读 p3 ++正确; (*p3 )++;错误
static int c=0;
p1=(char *)malloc(100);
strcpy(p1,"123456789");
return 0;
}