数组在函数中传递数组: 实际上传递的是指针
结构体:
struct man 声明一个结构体类型
{
int ID; 先定义结构体类型 说明数据组成和大小
char name[10];
char sex[10];
};
struct man cwy 再定义变量
变量的类型 -> 变量的大小 和 存储方式
cwy.ID = 4; 变量赋值
cwy . ID
基本地址 偏移地址
strcpy(cwy.name, ”caoweiyi”);
scanf(“ %s”, cwy.name);
scanf(“ %s”, &cwy.ID);
从最高的开始访问 ID
name
sex
结构体数组
struct man
{
};
struct man tab[10];
int num;
int i ;
scanf(“ %s”,&num);
for( i = 0 ; i < num ; i++)
{
scanf( “ %d”, &tab[i].ID );
scanf( “ %s”, &tab[i].name );
scanf( “ %s”, &tab[i].sex);
}
在子函数中使用,需要将 结构体声明 放外面
tab[i].name 访问用 箭头 或 点
= (*(tab + i) .name )
= (tab + i) -> name
共用体,联合体
union hold
{
int digit;
double bigfl; 定义用最大的类型 进行存储
char letter;
} c ;
若为结构体,大小为13
若为共用体,大小为 8
该联合变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲击旧值。
枚举 整型常量
enum color
{
red ,
green ,
blue ,
} c ;
若无初始化,则默认从 0 开始 ,每次 + 1
枚举提高了代码的可读性
结构体提高了代码的结构性
位运算
1、按位取反 ~
将 1 -> 0 ; o -> 1
2、按位与 &
有 0 为 0
aa = aa & 0xf7 第3位 ,清零
最高位为15,置0,就减去相应位的值。
3、按位或 |
有1为1
aa = aa | 0x08 第3位 , 置1
4、 移位
左移 << = *2
右移 >> = /2 需考虑溢出
无符号: 用0 填左端空出位
有符号: 看机器(0 或 符号位 1)
aa |= 1 << 3; 第3位 , 置 1
aa &= ~ (1 << 3); 第3位 , 清零
需 先清零, 再置1
A &= ~A 将A清零
掩码 位 与 运算符 组合 大多的数为 0
MASK = 2; 即 0000 0010, 第2位为1
flags &= ~MASK; 第2位 , 清零
flags |= MASK; 第2位 , 置1
转置位
^ 按位异或
P ^= 0x5 << 0; 5即 0101
跟1 ^ 取反
跟 0 ^ 不变
查看一位的值
if ( (flag & MASK) == MASK )
printf(“Yes \n”);
else
printf(“NO\n”);