7.结构体(2)

结构体(2)
结构体的大小

struct Student
{
	char s_id[10];
	char s_name[10];
	char s_sex[8];
	int s_age;
};

//void Print_Student(struct Student stud[], int n)
void Print_Student(struct Student *stud, int n)     //sizeof(stud)  //4字节
{
	assert(stud != nullptr);
	printf("%-10s %-10s %-8s %-5d\n", "id", "name", "sex", "age");
	for (int i = 0;i < n;++i)
	{
		//printf("%-10s %-10s %-8s %-5d\n", stud[i].s_id, stud[i].s_name, stud[i].s_sex, stud[i].s_age); // (写法一)
		//printf("%-10s %-10s %-8s %-5d\n", (*(stud + i)).s_id, (*(stud+i)).s_name, (*(stud + i)).s_sex, (*(stud + i)).s_age); // (写法二)
		printf("%-10s %-10s %-8s %-5d\n", stud->s_id, stud->s_name, stud->s_sex, stud->s_age); 
		stud++;//(写法三)
	}
	printf("\n");
}
int main()
{
	
	struct Student studx[10] = {
		{"0901","yhping","man",23},
		{"0901","chang","man",33},
		{"0901","hexing","woman",13},
		{"0901","lejian","man",24},
		{"0901","liuxiao","woman",45},
		{"0901","zhang","man",15},
		{"0901","zhaowu","woman",22},
	};

	Print_Student(studx,7);


	return 0;
}

结构体大小

由于存储变量地址对齐的问题,计算结构体大小的3条规则:
1.结构体变量的首地址,必须是结构体变量中的“最大基本数据类型成员所占字节数”的整数倍。
2.结构体变量中的每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节数的整数倍。
3.结构体变量的总大小,为结构体变量中“最大基本数据类型成员所占字节数"的整数倍。

struct Node
{
	char cha;
	char chb;
	int ia;//共8字节
	//char cha; int ia; char chb;   //共12字节

	
};
int main() 
{
	struct Node x = {'a','b',0x12345678};
	int size = sizeof(x);
	printf("%d \n", size);

}
struct node // double
 {
    char cha;
    double da;
    char chb; 
};
sizeof(struct node);/ /24

struct node//数组
{
    char ch[3];
    int ia;
};
sizeof(struct node);//8
struct Node
{
	char ch;
	typedef union
	{
		int a;
		float f;
	}AF;  //变为类型
};
int main()
{
	struct Node x;
	Node::AF::y;
	return 0;
}
struct Node
{
	char ch;
	union
	{
		int a;
		float f;
	}AF;
};
int main()
{
	struct Node x;
	sizeof(x);  //8字节
	x.ch = 'a';
	x.AF.a = 10;


	return 0;
}
struct Node
{
	char ch;
	union AF
	{
		int a;
		float f;
	};
};
int main()
{
	struct Node x;
	printf("%d \n", sizeof(x));
	Node::AF y;
	return 0;
}
struct Node
{
	char ch;
	union   //哑元
	{
		int a;
		float f;
	};
};
int main()
{
	Node x;   //8字节
	x.ch = 'x';
	x.a = 10;
	x.f = 12.23;
	return 0;
}
struct      //哑元 (无名称)
{
	char ch[2];
	short x;

}x;
struct
{
	char ch[2];
	short x;
}y;

union Node
{
	
		char a;
		char b;
	
	short sx;
};
int main()
{
	union Node x;
	x.sx = 0x0001;
	
	if (x.b == 0)  //不可判断
	{
		printf("小端存放");
	}
	else
	{
		printf("大端存放");
	}
	 
	return 0;
}
int main()
{
	short sx = 0x0001;
	char* cp = (char*)&sx;
	if (*cp == 1)
	{
		printf("小端存放");
	}
	else
	{
		printf("大端存放");
	}

	return 0;
}


union Node
{
	unsigned char ch[2];
	unsigned short sx;
};
int main()
{
	union Node x;  //2
	x.sx = 0x6162;
	printf("%c \n", x.ch[0]);  //b
	printf("%c \n", x.ch[1]);  //a 

	return 0;
}
struct Student
{
	const char* name;  //指针4字节
	int age;   //4字节
};
struct Student s1;   //sizeof(s1);   //8

struct Student s2 = { "yhping",12 };  //8  结构体大小与存放内容无关
int main()
{
	printf("s1: %d\n", sizeof(s1));
	printf("s2: %d\n", sizeof(s2));
	return 0;
}
struct Node
{
	char cha;
	char chb;
	int ia;//共8字节
	//char cha; int ia; char chb;   //共12字节
};
int main() 
{
	struct Node x = {'a','b',0x12345678};
	int size = sizeof(x);
	printf("%d \n", size);

}
int main()
{
	int a = 10,b = 20;
	char buff[20];
	int len = sprintf_s(buff, 20, "a=%d b=%d", a, b);  //格式化打印  buff中实际有效长度为15
	float ft = 12.25f;
	sprintf_s(buff, 20, "%.2f", ft);

	len = printf("a=%d b=%d \n", a, b);

	fprintf(stderr, "a=%d b=%d \n", a, b);  //标准输出设备 stderr stdout


	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值