结构体,共用体,枚举

2019/7/23 19:02:39 人评论 次浏览 分类:学习教程

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

相关资讯

    暂无相关的资讯...

共有访客发表了评论 网友评论

验证码: 看不清楚?
    -->