1.结构体
**
定义一个person 这种数据类型
struct person{
char name[20];
int height;
};
//以上表示你定义了一个结构体数据类型,该数据类型的名字叫 struct person
typedef struct person per; //给struct person 取了个别名叫per
typedef struct person{
char name[20];
int height;
}per;
//定义一个结构体变量
类型名 变量名;
per p1={"zhangsan",175};
结构体变量访问成员 变量名.成员名
scanf("%s%d",p1.name,&p1.height);
printf("%s%d\n",p1.name,p1.height);
//结构体变量赋值
per p2; p2=p1;
//定义一个结构体指针变量
per * pper=NULL;
pper=&p1;
//结构体指针访问成员 指针名->成员名
scanf("%s%d",pper->name,&pper->height);
printf("%s%d",pper->name,pper->height);
**
2.字节对齐
**
字节对齐: 系统一次性分配几个字节
自然对齐方式:
char ch; 1
short s: 2
int i; 4
float f; 4
double d; 4字节对齐 (8) gcc
结构体对齐方式:按照成员当中字节对齐方式最大的那个
#include<stdio.h>
struct A{
short s;
int b;
char c;
};
struct B{
int b;
short s;
char c;
};
int main(void)
{
printf("%d\n",sizeof(struct A));12
printf("%d\n",sizeof(struct B)); 8
}
**
3.共用体:
**
自己去创建一个新的数据类型
union un{
int a;
char c;
};
//定义一个共用体数据类型,该数据类型的名字叫union un;
//共用体所有成员的首地址是一致的
sizeof(union un)====所有成员当中占内存最大的
**
4.小端序,大端序
**
低字节存在低地址处称为叫小端序
低字节存在高地址称为叫大端序
如何判定pc是大端序还是小端序
#include<stdio.h>
union un{
int a;
char c;
};
//定义一个共用体数据的名字叫union un;
int main(void)
{
//定义一个共用体变量
union un u1;
u1.a=0x12345678;
if(u1.c==0x78)
{
printf("该pc为小端序\n");
}else{
printf("该pc为大端序\n");
}
return 0;
}
**
5.枚举
**
枚举定义常量的另外一种方式:
(1).宏定义 #define N 5
(2).const
int a=5;
a=8;
const int b=10;
//b=20;
char ch='A';
//const char * p=&ch;
char const * p=&ch;
// *p='B'; 不可变
char sh='B';
p=&sh;
char * const ps=&ch;
ps=&sh; //ps不可变
(3).枚举可以让你的代码语义化更强
ERR //插入失败返回ERR
OK //插入成功返回OK
#define ERR -1
#define OK 0
#define HEAD -1
#define TAIL 0
enum opt
{
ERR=-1,OK,HEAD=-1,TAIL
};
ERR默认是从0开始,如果你想让它从-1开始,你自己需要更改
**
6.宏
**
#define N 5
带参数的宏
(1).带一个参数的宏 宏是一种替换模式:
设有以下宏定义: #define N 3
#define Y(n) ((N+1)n)
严谨的写法: #define Y(n) ((N+1)(n))
执行语句z=2*(N+Y(5+1));后,z的值为____________。
A、出错 B、42 C、48 D、54
#include<stdio.h>
#define MIN(x,y) (x)<(y)?(x):(y)
void main()
{
int i=10, j=15,k;
k=10*MIN(i,j); 15
printf("%d", k);
}
编写一标准宏,实现两个数当中求最小值
#define MIN(x,y) ((x)<(y)?(x):(y))
**
7.main函数:
**
系统传给main
#include<stdio.h>
int main(int argc, const char *argv[])
{
//argc 表示传给参数的个数
//argv 传过来是个数组,该数组中的每个元素是个char *
//总结,传过来 argc个char *
int i=0;
for(i=0;i<argc;i++)
{
printf("argv[%d]=%s\n",i,argv[i]);
}
return 0;
}
******终端上:******linux@ubuntu:/mnt/hgfs/19071/7-19$ ./main zhangsan lisi wangwu
argv[0]=./main
argv[1]=zhangsan
argv[2]=lisi
argv[3]=wangwu