数据的本质:固定大小内存块的别名
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int a;//告诉编码器分配4各字节的内存
int b[10];//告诉c编译器分配40内存字节
printf("b:%d, b+1:%d, &b:%d, &b+1:%d\n",b,b+1,&b,&b+1);
//b+1 &b+1结果不一样
//b &b 所代表的数据类型不一样
//b 代表的数组首元素地址
//&b 代表的是整个数组的地址
}
运行结果:
求数据内存的大小
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int a;
int b[10];
printf("a的内存的大小:%d\n",sizeof(a));
printf("b[]的内存的大小:%d\n",sizeof(b));
}
运行结果:
给数据类型起别名:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Teacher
{
char name[64];
int age;
};
int main()
{
int a;
int b[10];
struct Teacher t1;
t1.age = 31;
printf("%d",t1.age);
}
运行结果:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Teacher
{
int a;
}Teacher1;
int main()
{
int a;
int b[10];
Teacher1 B;
B.a = 5;
printf("%d",B.a);
}
运行结果:
这两种的区别:第一种没有typedef就必须用struct Theather t1声明
第二种有typedef声明的时候就可以直接用 Teacher1 B声明
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int u32;
int main()
{
int a;
int b[10];
printf("%d",sizeof(u32));
}
运行结果:
数据类型的封装
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *p = NULL;
p = (char*)malloc(10);
//因为malloc返回值是void型,所以得转换为char*
void *q = NULL;
q = &p;
//因为q是void *型 可以被赋值为char*;
}