0726【C语言】

构造数据类型

数据类型

1.基本数据类型:short int long float double

2.构造数据类型:结构体、共用体(联合体)、枚举

结构体

结构体类型的定义

  struct 结构体名 
        {
            数据类型1 成员变量1;
            数据类型2 成员变量2;
            数据类型3 成员变量3;
            ...
        };

如下,定义结构体名为student

struct student
{
    int num;
    int one;
    int two;
    int three;
    int four;
    int five;
    
};

   结构体变量的定义

   注意:变量类型为struct student!

struct student s[5] = {{1,59,60,57,62,63},
                           {2,60,61,62,63,64},
                           {3,61,59,63,64,58},
                           {4,90,91,92,93,94},
                           {5,85,86,87,88,89}};

结构体变量的初始化

  1.全部初始化
   2.局部初始化

结构体成员的访问

  .  :结构体变量类型访问成员变量
  -> :结构体指针类型访问成员变量

for (i = 0; i < len; i++)
	{

		printf("姓名:%s\n", pstu[i].name);
		printf("性别:%c\n", pstu[i].sex);
		printf("年龄:%d\n", pstu[i].age);
		printf("成绩:%d\n", pstu[i].score);
		
		printf("姓名:%s\n", (pstu+i)->name);
		printf("性别:%c\n", (pstu+i)->sex);
		printf("年龄:%d\n", (pstu+i)->age);
		printf("成绩:%d\n", (pstu+i)->score);
     }

结构体访问成员变量最终的类型由成员变量的类型决定

结构体的存储

内存对齐遵循以下原则:

 1.存放结构体成员变量,必须保证前面的长度为成员变量所占空间大小的整数倍
 2.结构体整体的大小必须为最大类型长度的整数倍
 

 struct date 
    {
        char a;
        int year;
        int mon;
        int day;
    }

如上结构体内存为12个字节!

结构体传参

无参
struct date Get (void)
{
    struct date i;
    scanf("%d%d%d",&i.year,&i.month,&i.day);
    return i;
}
变量
int Put(struct date i)
{
    printf("%d-%d-%d\n",i.year,i.month,i.day);
    return 0;
}
指针
int GetDateByPoint(struct date *pd)
{
	scanf("%d%d%d", &pd->year, &pd->mon, &pd->day);

	return 0;
}

数组传参

int find(struct student *pstu,int len)
{
   
           return 0;
}

共用体(联合体)

共用体(联合体)中的数据共享内存,即占内存最大的数据类型所占的字节

union s 
{
	char a;
	short b;
	int c;
};

共用体中内存共享,因此会出现覆盖现象

int main(void)
{
	union s s1;
	
	s1.a = 'A';
	s1.b = 200;
	s1.c = 1000000;
	printf("%c\n", s1.a);
	printf("%d\n", s1.b);
	printf("%d\n", s1.c);

	return 0;
}

运行结果为

重点:大端小端的判断

在共用体中,小字节的数据类型从最低的地址开始存储。大端小端是指不同的存储方式。大端是从数据的高位开始存储,存到低地址中,小端则相反。

方法一:

#if 0
union s
{
    char a;
    int b;
};

int main(void)
{
    union s s1;
    s1.b = 1;
    if(s1.a)
       {
           printf("小端\n");
       }
    else
       {
           printf("大端\n");
       }
       return 0;
}

方法二:判断nums首地址的值

int main(void)
{
    int num = 0;
    num = 0x11223344;
    if(*(char *)(&num) == 0x11)
    printf("大端\n");
    else if(*(char *)&num == 0x44)
    printf("小端\n");
    return 0;

}

枚举类型

enum weekyday
{
    Monday = 1,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday,
};

1.枚举类型:
    1.枚举常量第一个值默认为0,后面的枚举常量为前一个枚举常量的值+1 
    2.枚举类型对应的变量的值应该为枚举常量中的值之一
    3.枚举常量可以让代码提高可读性
 

int main(void)
{
	enum weekyday day;

	scanf("%d", (int *)&day);
	
	if (Monday == day)
	{
		printf("尾号为1和6限行\n");
	}
	else if (Tuesday == day)
	{
		printf("尾号为2和7限行\n");
	}
	else if (Wednesday == day)
	{
		printf("尾号为3和8限行\n");
	}
	else if (Thursday == day)
	{
		printf("尾号为4和9限行\n");
	}
	else if (Friday == day)
	{
		printf("尾号为0和5限行\n");
	}
	
	return 0;
}

运算符

位运算

1.&      按位与
2. |      按位或
3. ^      按位异或        相同为0  相异为1 
4. ~      按位取反
5.<<     左移            
6.>>     右移            让数据缩小   num /= 2 ^ n

   1.1 不改变其余位的前提下,让第n位置1
    int num: 1110 1011 
   
    num = num | (1 << n);

    1.2不改变其余位的前提下,让第n位置0
    int num:1110 1011

    num = num & (~(1 << n));

    ^实现两个数的交换

        

int main(void)
{
    int a = 100;
    int b = 200;
    a = a^b;
    b = a^b;
    a = a^b;
    printf("a = %d\nb = %d\n",a,b);
    return 0;
}

运算符优先级:

括号 > 单目 > 双目 > 三目 > 赋值 > 逗号 
    
双目:
算数 > 移位 > 关系 > 位运算 > 逻辑

目录

构造数据类型

数据类型

1.基本数据类型:short int long float double

2.构造数据类型:结构体、共用体(联合体)、枚举

结构体

结构体类型的定义

   结构体变量的定义

   注意:变量类型为struct student!

结构体变量的初始化

结构体成员的访问

结构体的存储

内存对齐遵循以下原则:

结构体传参

无参

变量

指针


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值