我了解指针的算法是如何工作的,但是我对指针的指针之一有疑问: 如果我有此代码:
int x;
int* ptr = &x;
int** ptrptr = &ptr;
在标准Windows系统上,如果我这样做:
printf("%d",ptr);
ptr++;
printf("%d",ptr);
ptr的值将比以前大“ +4”,这显然是因为整数需要4个字节。
现在,如果我这样做了:
printf("%d",ptrptr);
ptrptr++;
printf("%d",ptrptr);
ptrptr将比以前有一个“ +16”值,为什么?
如果这个问题已经发布,我深表歉意,谢谢。
代码:
#include<stdio.h>
int main(void){
int x;
int* ptr = &x;
int** ptrptr = &ptr;
printf("Pointer: %p\nPointer of pointer: %p\n",(void*)ptr,(void*)ptrptr);
ptr++;
ptrptr++;
printf("Pointer: %p\nPointer of pointer: %p\n",(void*)ptr,(void*)ptrptr);
return 0;
}
输出:
Pointer: 000000000062FE44
Pointer of pointer: 000000000062FE38
Pointer: 000000000062FE48
Pointer of pointer: 000000000062FE40
答案 0 :(得分:1)
[
{
"businessEntityName":{
"businessEntityName":"abc1 ",
"businessEntityDescription":"welcome to the abcd"
},
"name":"Paul",
"applicationName":{
"applicationRoleOrGroupName":"view",
"applicationRoleOrGroupDescription":"Viewers on view"
},
"status":{
"name":"Removed on: 27-Aug-2020",
"style":"error"
},
"type":"Manager"
},
{
"businessEntityName":{
"businessEntityName":"Internal",
"businessEntityDescription":"Okay"
},
"name":"John Smith",
"applicationRoleOrGroupName":{
"applicationRoleOrGroupName":"Master",
"applicationRoleOrGroupDescription":"Can access read only information of the non-sensitive pages"
},
"status":{
"name":"Active from: 26-Aug-2020",
"style":"success"
},
"type":"admin"
},
{
"businessEntityName":{
"businessEntityName":"External",
"businessEntityDescription":"All my Data"
},
"name":"ramesh",
"applicationRoleOrGroupName":{
"applicationRoleOrGroupName":"welcome",
"applicationRoleOrGroupDescription":"User for My data"
},
"status":{
"name":"Active from: 18-Aug-2020",
"style":"success"
},
"type":"HOD"
}
]
和0x...FE40
之间的差是0x...FE38
,不是 8
,并且8是地址上正确的字节数64位计算机。
要保存一个int(在您的系统上),您需要一个4字节的框。因此,要跳到内存中的下一项,请在初始int的地址中添加4。
要保存一个pointer_to_int(这是您的64位系统上的地址),您需要一个8字节的框。
提示:要减去的数字是8字节长的地址:
16
-0x00.00.00.00.00.62.FE.40
= 0x00.00.00.00.00.62.FE.38
。点只是视觉辅助。