C语言的指针类型包含两方面信息:一是地址,存放在指针变量中;二是类型信息,关乎读写的长度,没有存储在指针变量中,位于用该指针读写时的mov指令中,不同的读写长度对应的mov指令不同。
例子:
int gi; //globlevariable
int *pi; //globel pointer variable
int _tmain(int argc,_TCHAR* argv[])
{
pi = &gi;
0127136E mov dword ptr ds:[01277138h],127713Ch
*pi = 12;
01271378 mov eax,dword ptr ds:[01277138h]
0127137D mov dword ptr [eax],0Ch //dword 说明了给int型指针赋值要占4字节
return 0;
01271383 xor eax,eax
}
换成short类型的变量在进行测试
short gi; //globle variable
short *pi; //globel pointer variable
int _tmain(int argc,_TCHAR* argv[])
{
pi = &gi;
0133136E mov dword ptr ds:[01337138h],133713Ch
*pi = 12;
01331378 mov eax,0Ch
0133137D mov ecx,dword ptr ds:[01337138h]
01331383 mov word ptr [ecx],ax //word说明了给short型指针赋值要2个字节
return 0;
01331386 xor eax,eax
}
指针的加/减1是加/减该指针指向类型的长度的字节数。
例如int *pi; pi加1实际地址加了4字节。
short *ps; ps加1实际地址加了2个字节。
void*p是不能进行加减的,应为在汇编语言中它只有地址信息,没有类型信息,编译器不知道该加减几个字节。
本文详细解释了C语言中指针的基本概念,包括指针如何存储地址和类型信息,不同类型指针在内存中的操作差异,以及如何通过指针进行变量的读写。此外,还介绍了指针加减运算的原理及其在不同数据类型下的行为。
3339

被折叠的 条评论
为什么被折叠?



