linuxC学习十七天

今天对结构体进行了认识,以及一些结构体的注意点

一、结构体

1、基础解释

1、结构体是复合数据,内部存储不同的类型
2、结构体是用struct(关键字) student(名称)
3、结构体也可以没有名称,但是不能调用
4、结构体的定义: struct student s1
5、结构体变量的初始化:struct student s1={数据按结构体里类型的顺序填写,用逗号隔开}
6、变量引用成员用“ . ”,指针引用成员用“ -> ”
例如:printf("%d %s",s1.id,s1->name)
7、一些结构体初始化,定义的程序

#include <stdio.h>

struct Family
{
	int age;
	char name[20];
	char chenghu[20];
	
}s3;


int main1()
{
	struct Family s1 = {20,"gmf","son"};
	
	s1.age = 15;
	
	printf("age = %d,mane =%s,chegnhu=%s\n",s1.age,s1.name,s1.chenghu);
	
	struct Family *s2 = &s1;
	
	s1.age = 16;
	
	printf("age = %d,mane =%s,chegnhu=%s\n",s2->age,s2->name,s2->chenghu);
	
	return 0;
}

2、内存对齐问题

1、结构体的排列方式不同,空间的大小是不同的
2、结构体开辟空间有一些约束的条件
(1)结构体成员的首地址要能被该成员的类型整除
(2)结构体每次分配空间都是按最大类型分配的
(3)如果分配空间够用,就不用分配
(4)如果当前类型大于系统系数的时候,按系数标准进行分配空间,否则按最大类型分配空间
3、结构体可以当实参传送,但空间过大一般传结构体使用指针传送地址

二、共用体

1、顾名思义,共用体就是所有成员公用一段内存,后初始化的值会覆盖原来的。
2、共用体的大小是成员中占据最大的成员的大小
3、运用公用体可以判断内存是大端还是小端
(1)大端:低位的数放在高地址,高位的数放在低地址
(2)小端:低位的数放在低地址,高位的数放在高地址
4、判断大小端的程序

#include <stdio.h>

int func()
{
	union 
	{
		unsigned int  a;
		unsigned char b;
	}t;
	
	t.a = 0x1234;
	
	return (t.b == 0x34);
}

int main()
{
	if( 1 == func())
		printf("小端\n");
	else
		printf("大端\n");
	
	return 0;
}

三、枚举

1、枚举是用enum,用于定义常量
2、enum day(可以不写) {one,two,…};第一个值默认从0开始,每个数都可以赋初值,但下一个数就是这个数+1

四、寻找两个数组的最大子串(有两个相同长度的子串时默认打印前一个)

/*--------------------寻找最大共子串(暴力求解)-----------*/
#include <stdio.h>
#include <string.h>

void StrCmp(char *p1,char *p2)
{
	char a[50] = {0};										//用来存放找到的相同数
	char b[50] = {0};										//用了找最大的
	int i,j;
	int count = 0;
	int len1 = strlen(p1);
	int len2 = strlen(p2);
	
	for(i = 0; i < len1; i++)								//str1
	{		
		int n = i;
		strcpy(a,"\0");
		
		for(j = 0; j < len2; j++)							//str2
		{	
			int m = j;
			while(p1[m] == p2[n] && p1[n] != '\0')			//判断是否相同,同时将数据给a,直到两个不同时跳出
			{	
				a[count] = p2[n];
				n++;
				m++;
				count++;
			}
			
			if(strlen(a) > strlen(b))					 	//每次判断b数组是否是最大的
			{
				strcpy(b,a);
			}	
			count = 0;
		}
	}
	
		puts(b);
}

int main1()
{
	char str1[]="aocdfedfg";
	char str2[]="bacdfae";
	
	StrCmp(str1,str2);
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值