c语言 *p跟p什么区别啊
发布网友
发布时间:2022-04-24 05:21
我来回答
共4个回答
热心网友
时间:2023-10-31 11:31
int a[10]; *a=a[0], a=&a[0]; 同理*p 就是p指针变量中的内容,这都是(逻辑代码)C代码的一种表示而已。
给你个例子:
注:这里指的通用寄存器有eax,ebx,ecx,edx,ebp,esp,esi,edi
dword ptr:告诉处理器,安装双字,即16X2位bit处理
mov:方向 A <- B
lea: load execute address EA指的是执行时,分配的内存地址
[] : 取寄存器标识出的内存块中的内容
1:
2: int main(){
00401010 push ebp // 内存分配
00401011 mov ebp,esp
00401013 sub esp,70h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-70h] // 初始化
0040101C mov ecx,1Ch
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
3:////////////////////////////////////////////下面是关键
4: int array[10];
5: int* p = array;
00401028 lea eax,[ebp-28h] // 取数组变量内存空间地址,值存入eax寄存器
0040102B mov dword ptr [ebp-2Ch],eax // eax寄存器值接着转存到 p指针变量内存空间
6: int b = *p;
0040102E mov ecx,dword ptr [ebp-2Ch] // 取p指针变量内存空间地址,放入一个空闲的ecx寄存器
00401031 mov edx,dword ptr [ecx] // *p,即把ecx,或者是说p指针所指的内容取出,放到edx里面。
00401033 mov dword ptr [ebp-30h],edx // 把edx里面的东西,就是所谓的*p放到b变量空间里面。
7:
8: return 0;
00401036 xor eax,eax// 异或掉使用过的传值寄存器,设置错误码为0.
9: }///////////////////////////////////////收工
00401038 pop edi
00401039 pop esi
0040103A pop ebx
0040103B mov esp,ebp
0040103D pop ebp
0040103E ret
热心网友
时间:2023-10-31 11:31
对初学者来说,主要是分辨*号出现的位置,下面举例说明。
int i=2;
int *p=&i; //出现在定义中,表示类型;
int *q; //出现在定义中,表示类型;
q=&i; //同样是将&i赋给指针,但是这儿不需要*号。
*q=5; //相当于i=5,这儿的*是在使用中,表示对指针所指的对象操作。
热心网友
时间:2023-10-31 11:32
举例:
int a = 3; ///a是一个整型变量,值为3
int *p = &a;// p是一个指针,指向a的地址
说p,就是指针,
*p 是指针指向的内容,即a地址中的内容
实际上*p 和a 这个应该是一个意思了
热心网友
时间:2023-10-31 11:31
int a[10]; *a=a[0], a=&a[0]; 同理*p 就是p指针变量中的内容,这都是(逻辑代码)C代码的一种表示而已。
给你个例子:
注:这里指的通用寄存器有eax,ebx,ecx,edx,ebp,esp,esi,edi
dword ptr:告诉处理器,安装双字,即16X2位bit处理
mov:方向 A <- B
lea: load execute address EA指的是执行时,分配的内存地址
[] : 取寄存器标识出的内存块中的内容
1:
2: int main(){
00401010 push ebp // 内存分配
00401011 mov ebp,esp
00401013 sub esp,70h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-70h] // 初始化
0040101C mov ecx,1Ch
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
3:////////////////////////////////////////////下面是关键
4: int array[10];
5: int* p = array;
00401028 lea eax,[ebp-28h] // 取数组变量内存空间地址,值存入eax寄存器
0040102B mov dword ptr [ebp-2Ch],eax // eax寄存器值接着转存到 p指针变量内存空间
6: int b = *p;
0040102E mov ecx,dword ptr [ebp-2Ch] // 取p指针变量内存空间地址,放入一个空闲的ecx寄存器
00401031 mov edx,dword ptr [ecx] // *p,即把ecx,或者是说p指针所指的内容取出,放到edx里面。
00401033 mov dword ptr [ebp-30h],edx // 把edx里面的东西,就是所谓的*p放到b变量空间里面。
7:
8: return 0;
00401036 xor eax,eax// 异或掉使用过的传值寄存器,设置错误码为0.
9: }///////////////////////////////////////收工
00401038 pop edi
00401039 pop esi
0040103A pop ebx
0040103B mov esp,ebp
0040103D pop ebp
0040103E ret
热心网友
时间:2023-10-31 11:31
对初学者来说,主要是分辨*号出现的位置,下面举例说明。
int i=2;
int *p=&i; //出现在定义中,表示类型;
int *q; //出现在定义中,表示类型;
q=&i; //同样是将&i赋给指针,但是这儿不需要*号。
*q=5; //相当于i=5,这儿的*是在使用中,表示对指针所指的对象操作。
热心网友
时间:2023-10-31 11:32
举例:
int a = 3; ///a是一个整型变量,值为3
int *p = &a;// p是一个指针,指向a的地址
说p,就是指针,
*p 是指针指向的内容,即a地址中的内容
实际上*p 和a 这个应该是一个意思了
热心网友
时间:2023-10-31 11:32
*p是指针,p只是个变量
热心网友
时间:2023-10-31 11:32
*p是指针,p只是个变量
热心网友
时间:2023-10-31 11:31
int a[10]; *a=a[0], a=&a[0]; 同理*p 就是p指针变量中的内容,这都是(逻辑代码)C代码的一种表示而已。
给你个例子:
注:这里指的通用寄存器有eax,ebx,ecx,edx,ebp,esp,esi,edi
dword ptr:告诉处理器,安装双字,即16X2位bit处理
mov:方向 A <- B
lea: load execute address EA指的是执行时,分配的内存地址
[] : 取寄存器标识出的内存块中的内容
1:
2: int main(){
00401010 push ebp // 内存分配
00401011 mov ebp,esp
00401013 sub esp,70h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-70h] // 初始化
0040101C mov ecx,1Ch
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
3:////////////////////////////////////////////下面是关键
4: int array[10];
5: int* p = array;
00401028 lea eax,[ebp-28h] // 取数组变量内存空间地址,值存入eax寄存器
0040102B mov dword ptr [ebp-2Ch],eax // eax寄存器值接着转存到 p指针变量内存空间
6: int b = *p;
0040102E mov ecx,dword ptr [ebp-2Ch] // 取p指针变量内存空间地址,放入一个空闲的ecx寄存器
00401031 mov edx,dword ptr [ecx] // *p,即把ecx,或者是说p指针所指的内容取出,放到edx里面。
00401033 mov dword ptr [ebp-30h],edx // 把edx里面的东西,就是所谓的*p放到b变量空间里面。
7:
8: return 0;
00401036 xor eax,eax// 异或掉使用过的传值寄存器,设置错误码为0.
9: }///////////////////////////////////////收工
00401038 pop edi
00401039 pop esi
0040103A pop ebx
0040103B mov esp,ebp
0040103D pop ebp
0040103E ret
热心网友
时间:2023-10-31 11:31
对初学者来说,主要是分辨*号出现的位置,下面举例说明。
int i=2;
int *p=&i; //出现在定义中,表示类型;
int *q; //出现在定义中,表示类型;
q=&i; //同样是将&i赋给指针,但是这儿不需要*号。
*q=5; //相当于i=5,这儿的*是在使用中,表示对指针所指的对象操作。
热心网友
时间:2023-10-31 11:32
举例:
int a = 3; ///a是一个整型变量,值为3
int *p = &a;// p是一个指针,指向a的地址
说p,就是指针,
*p 是指针指向的内容,即a地址中的内容
实际上*p 和a 这个应该是一个意思了
热心网友
时间:2023-10-31 11:32
*p是指针,p只是个变量