结构体指针
Tutorial: C与汇编
Category: C语言
Published: 2026-04-07 13:58:26
Views: 20
Likes: 0
Comments: 0
1. 定义及使用
#include <stdio.h>
struct Point
{
int x;
int y;
};
int main()
{
Point p;
Point *px = &p;
printf("%x\n", px);
px++;
printf("%x\n", px);
return 0;
}
11: Point p;
12: Point *px = &p;
0040D408 lea eax,[ebp-8]
0040D40B mov dword ptr [ebp-0Ch],eax
13: printf("%x\n", px);
0040D40E mov ecx,dword ptr [ebp-0Ch]
0040D411 push ecx
0040D412 push offset string "%x\n" (0042201c)
0040D417 call printf (0040d6b0)
0040D41C add esp,8
14:
15: px++;
0040D41F mov edx,dword ptr [ebp-0Ch]
0040D422 add edx,8
0040D425 mov dword ptr [ebp-0Ch],edx
16: printf("%x\n", px);
0040D428 mov eax,dword ptr [ebp-0Ch]
0040D42B push eax
0040D42C push offset string "%x\n" (0042201c)
0040D431 call printf (0040d6b0)
0040D436 add esp,8
2. 结构体指针取值
#include <stdio.h>
struct Point
{
int x;
int y;
};
int main()
{
Point p = {1, 2};
Point *px = &p;
int x = px->x;
int y = px->y;
return 0;
}
11: Point p = {1, 2};
0040D748 mov dword ptr [ebp-8],1
0040D74F mov dword ptr [ebp-4],2
12: Point *px = &p;
0040D756 lea eax,[ebp-8]
0040D759 mov dword ptr [ebp-0Ch],eax
13:
14: int x = px->x;
0040D75C mov ecx,dword ptr [ebp-0Ch]
0040D75F mov edx,dword ptr [ecx]
0040D761 mov dword ptr [ebp-10h],edx
15: int y = px->y;
0040D764 mov eax,dword ptr [ebp-0Ch]
0040D767 mov ecx,dword ptr [eax+4]
0040D76A mov dword ptr [ebp-14h],ecx