1. 程式人生 > >Linuxc基礎 十四

Linuxc基礎 十四

今天老師講了結構體、記憶體對齊、共用體。
程式碼
結構體

#include <stdio.h>
struct Student1
{
	int  id;
	char name[20];
}s4 = {2, "小紅"};
int main()
{

	struct Student1 s1;
	
	struct Student1 s5 = {10, "小明"};
	
	printf ("id = %d,name = %s\n", s5.id, s5.name);
	
	
	struct Student1 *ps = &s4;
	s4.id = 20;
	printf ("id = %d,name = %s\n", ps->id, ps->name);
 
	return 0;
}

記憶體對齊

#include <stdio.h>

struct Test
{
	char c1;
	int  a;
	char c2;
};

struct Test1
{
	char c1;
	char c2;
	char c3;
	int  a;
};

struct Test2
{
	char c1;
	short s;
	int  a;
	char c3;
	
	struct Test t1;
	
	int a[20];
};
int main()
{
	printf ("sizeof Test = %lu\n", sizeof(struct Test));
	printf ("sizeof Test = %lu\n", sizeof(struct Test1));
	printf ("sizeof Test = %lu\n", sizeof(struct Test2));
	
	struct Test2 t1, t2;
	t1 = t2;
 
	return 0;
}

共同體

#include <stdio.h>
int func()
{
	union 
	{
		unsigned int  a;
		unsigned char c;
	}t;
	
	t.a = 0x12345678;
	
	return (t.c == 0x78);
}

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

總結
今天老師講的這幾個知識很實用,對於今後寫程式有很大的幫助。再記憶體對齊那一塊我之前還有一些問題,之後和同學探討了一下在加上老師的講解我很快就理解了這個知識點。我發現之前的一些功能的實現有很多瑕疵和複雜化,今天講的這幾個知識點可以解決這個問題。