c estrutura da linguagem e união

Estrutura

Conhecimento básico de estrutura

  1. A diferença entre estrutura e matriz
    Insira a descrição da imagem aqui
  2. Crie uma estrutura
struct student  //学生的数据类型
{
    
    
	char name[10];
	int age;

};

Você também pode criar ponteiros de estrutura e matrizes de estrutura


struct student* p; //结构体指针 ++跳过一整个结构体
struct student arr[10]; // 结构体数组 存放10个
  1. Acesso à estrutura
    Insira a descrição da imagem aqui
    Nota:
#include<stdio.h>

struct student
{
    
    
	char name[20];
	int age;
}x,*p;

int main()
{
    
    
	
	if (p == &x)
	{
    
    
		printf("haha");
	}
	return 0;
}

Aqui,
p é diferente de & x. P é um ponteiro de estrutura, mas é um ponteiro nulo, que é equivalente ao seguinte comportamento

int a;

& x é um ponteiro de estrutura que aponta para x depois que o endereço de x é salvo com um ponteiro de estrutura.

  1. O uso de
    typedef typedef pode simplificar o nome de uma variável de estrutura
typedef struct book
{
    
    
	char name[10];
	int price;
} book;


int main()
{
    
    
	book x[10] = {
    
     0 };
	return 0;
}

Agora, o livro é um tipo de estrutura.

  1. Acesso direto à estrutura
typedef struct book
{
    
    
	char name[10];
	int price;
} book;


int main()
{
    
    
	book x[10] = {
    
     0 };
	x[1].name[10] = "abcd";  //通过 点操作符访问
	return 0;
}
  1. Acesso indireto via ponteiro
typedef struct
{
    
    
	char name[10];
	int price;
}book;

void fun(book* pc)
{
    
    
	pc->price =10;
	printf("%d",pc->price);
}


int main()
{
    
    
	 book x[10] = {
    
     0 };
	
	 fun(x);
	return 0;
}

Ponteiro de estrutura

Insira a descrição da imagem aqui

struct stu
{
    
    
	char name[10];
	int age;
};

int main()
{
    
    
	
	struct stu *p;


	return 0;
}

p é um ponteiro para uma estrutura p + 1 pode saltar para a próxima estrutura
* p + 1 esta é uma operação ilegal
* p e p * P é toda a estrutura p é um ponteiro de estrutura

#include<stdio.h>

struct stu
{
    
    
	char name[10];
	int age;
}x;

int main()
{
    
    
	
	struct stu *p=&x;
	p->age = 10; // 可以这样 指针指向
	(*p).age=10; // 可以解引用得到 x
	return 0;
}
  1. Acesso de ponteiro de estrutura a estrutura aninhada
#include<stdio.h>

struct stu
{
    
    
	int arr[2];
	int age;
};

struct ptu
{
    
    
	int a;
	int b;
	struct stu sr ;
}s;

int main()
{
    
    
	struct ptu* p = &s;
	p->sr.age;
	return 0;
}

Insira a descrição da imagem aqui

Estrutura de alocação de memória

Em primeiro lugar, o que esse código produzirá?

struct S1
{
    
    
	char c1;
	int i;
	char c2;
};
int main()
{
    
    
printf("%d\n", sizeof(struct S1));
return 0;
}

Insira a descrição da imagem aqui
A saída 12 não deve ser 1 + 4 + 1 = 6. Pode-se observar que a memória da estrutura é armazenada de forma diferente.

12. 第一个成员在与结构体变量偏移量为0的地址处。
13. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。

VS中默认的值为8
Linux中的默认值为4
14. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。
15. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍                                                 
16. 结构体的整体大小就是所 有最大对齐数(含嵌套结构体的对齐数)的整数倍。

Insira a descrição da imagem aqui

Verde char azul memória inútil vermelho int

articulação

Pique aqui para unir

Acho que você gosta

Origin blog.csdn.net/qq_45849625/article/details/115003975
Recomendado
Clasificación