C语言指针结构体一些问题

#include <bits/stdc++.h>
using namespace std;
typedef struct AAA{
	int x1;
	float x2;
}Q;
int main()
<%
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	Q k1;
	Q k2;
	
	k1.x1 = 99;
	k1.x2 = 98.34F;
	
	k2.x1 = 77;
	k2.x2 = 87.34F;
	//初始化完毕
	
	Q* m1 = &k1;
	Q* m2 = &k2;
	
	m1 -> x1 = 75;
	m1 -> x2 = 33.2F;
	
	m2 -> x1 = 55;
	m2 -> x2 = 11.3F;
	
	return 0;
%>
#include <stdio.h> 
int main() 
{ 
 int a=10; 
 int *p; //定义个指针p 
 p=&a; //指针p获取变量a的地址
 printf("%d",*p); //输出指针p所指向的内存中的值
 getchar();getchar(); 
 return 0; 
} 

        这里 printf 语句里面*p 中的*号叫做间接运算符,作用是取得指针 p 所指向的内存中的 值。在 C 语言中*号有三个用途,分别是:

  1. 乘号,用做乘法运算,例如 5*6。
  2. 申明一个指针,在定义指针变量时使用,例如 int *p;
  3. 间接运算符,取得指针所指向的内存中的值,例如 printf("%d",*p);

在程序中存储一个整数 10,除了使用 int a;这种方式在内存中申请一块区域来存储,还有另外一种动态存储方法

malloc(4);
int *p; 
p=(int *)malloc(sizeof(int));

上面的代码中我们发现了一个很奇怪的符号“->”。->叫做结构体指针运算符,也是用 来访问结构体内部成员的。因为此处 p 是一个指针,所以不能使用 .号 访问内部成员,而要 使用->。

引用\[1\]:C语言字节对齐问题详解中提到了C语言中的字节对齐问题。在结构体中,为了提高内存访问的效率,编译器会对结构体进行字节对齐。这意味着结构体的成员在内存中并不是紧凑排列的,而是按照一定的规则进行对齐。具体的对齐规则取决于编译器和编译选项。\[1\] 引用\[2\]:在C语言中,可以使用宏offsetof来获取结构体成员相对于结构体开头的字节偏移量。这个宏非常有用,可以帮助我们计算出每个结构体成员相对于结构体开头的偏移字节数。通过这个宏,我们可以更好地理解结构体的内存布局。\[2\] 引用\[3\]:在C语言中,指针结构体的组合常常用于处理复杂的数据结构。指针可以指向结构体的成员,通过指针可以方便地对结构体进行操作。指针结构体的组合可以实现更灵活的数据处理和内存管理。\[3\] 综上所述,C语言中的指针结构体组合可以用于处理复杂的数据结构,而字节对齐问题则是在结构体中为了提高内存访问效率而进行的优化。通过使用宏offsetof,我们可以更好地理解结构体的内存布局。 #### 引用[.reference_title] - *1* *3* [结构体指针C语言结构体指针详解](https://blog.csdn.net/weixin_34069265/article/details/117110735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C语言结构体详解](https://blog.csdn.net/m0_70749276/article/details/127061692)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值