C结构体总结

结构体总结

  • 结构体的声明
  • 结构体在内存中的存储
  • 于结构体有关的操作符细节

结构体的声明

结构体是一种数据类型,就如同int,char…它是自定义属性,成员元素由使用人定义,声明存在完全声明和匿名声明,如同。

struct P
{
	int a;
	char ch;
};// - 完全声明

struct 
{
	char ch;
	int b;
}p;// - 匿名声明

匿名声明在下文中只能使用一次,实用性不强。
typedef重命名结构体,如图。

typedef struct P
{
	char ch;
	int a;
	int arr[20];
}P,*Ptr;

P是struct p 类型,Ptr是struct p类型的指针,这样可以减少代码的冗杂,同时提高代码的可读性。

结构体在内存中的存储

结构体的存储,遵循结构体内存对齐规则。
1.结构体的首成员永远存储在偏移量为0的位置处。
2.其余成员会存储在对齐数整数倍处。
3.成员对齐数是该成员字节数和编译器默认对齐数的最小值,同时对于数组来说,数组的字节数是数组每个元素的类型,同时如果出现结构体嵌套,则结构体的对齐数是结构体成员的最大对齐数。
4.最终结构体的内存大小,则是结构体成员最大对齐数的整数倍。

于结构体有关的操作符细节

‘.’ , '->'操作符如图。

int main()
{
	P p = { 0 };
	p.arr = (int*)malloc(sizeof(P) * 10);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		p.arr[i] = i;
		// - p.arr[i],p.arr先结合,在于[i]结合。
		printf("%d ", p.arr[i]);
	}
	// - p->arr+i先和p->arr结合,在和i进行计算
	memmove(p->arr, p->arr + i, sizeof(P) * (sz - i + 1));
	Test_Str(&p, 10, 2);
	printf("\n");
	for(i = 0; i < 10; i++)
	{
		printf("%d ", p.arr[i]);
	}

	return 0;
}

你可能感兴趣的:(c语言)