当我们声明双指针时 int/char 到底是什么 (**q)
What exactly int/char when we declare double pointer(**q)
让我们使用 64 位机器
其中指针在 64 位机器中为 8 个字节
int *p ; // it is a pointer to integer variable so when i increment p
// i.e., p++ it will increment by 4
char *r; // It is pointer to character .
// So if i increment 'r' it will increment by 1
int **q ; // if i increment q ie.,q++ it will increment 8 bytes
我尝试了这段代码,如果有什么不对的地方请指正
int a=10;
int *p;
char *r;
int **q;
p=&a;
q=&p;
printf("p= %p\t r= %p\t q=%p\n",p,r,q);
printf("p(increment)= %p\t r (increment)= %p\tq (increment)= %p ",++p,++r,++q);
输出
p= 0x7fff669bb1bc r= 0x7fff669bb2a0 q=0x7fff669bb1a0
p(increment)= 0x7fff669bb1c0 r (increment)= 0x7fff669bb2a1 q (increment)= 0x7fff669bb1a8
int
/char
/float
在双指针中的作用是什么?
在 int **p
中,您将指针增加它指向的大小(即指针)。由于指针的大小为8
,它将增加8
。
最终类型在这里没有作用。它的行为与指向 void
.
的指针一样
引用后缀 ++
运算符的 属性,来自 C11
,章节 §6.5.2.4,后缀递增和递减运算符, (强调我的)
The result of the postfix ++
operator is the value of the operand. As a side effect, the
value of the operand object is incremented (that is, the value 1 of the appropriate type is
added to it). [...]
在int *p ;
的情况下,p是指向类型int
的指针,因此增量将基于sizeof(int)
在int **p ;
的情况下,p是指向类型int *
的指针,因此增量将基于sizeof(int *)
好吧,这不仅取决于您的机器,还取决于您的实现。您可以通过输出 sizeof p
、sizeof r
和 sizeof q
来计算它们。打印 sizeof (int *)
、sizeof (char *)
和 sizeof (int **)
也有效。
C programmers traditionally like to know a lot (perhaps more than they
need to) about the underlying machine implementation.
在我看来,你不需要知道这些东西,因为编译器会为我们处理得很好(根据 C 标准)。此外,大多数使用这些东西的实践本质上都是未定义的行为。
让我们使用 64 位机器
其中指针在 64 位机器中为 8 个字节
int *p ; // it is a pointer to integer variable so when i increment p
// i.e., p++ it will increment by 4
char *r; // It is pointer to character .
// So if i increment 'r' it will increment by 1
int **q ; // if i increment q ie.,q++ it will increment 8 bytes
我尝试了这段代码,如果有什么不对的地方请指正
int a=10;
int *p;
char *r;
int **q;
p=&a;
q=&p;
printf("p= %p\t r= %p\t q=%p\n",p,r,q);
printf("p(increment)= %p\t r (increment)= %p\tq (increment)= %p ",++p,++r,++q);
输出
p= 0x7fff669bb1bc r= 0x7fff669bb2a0 q=0x7fff669bb1a0
p(increment)= 0x7fff669bb1c0 r (increment)= 0x7fff669bb2a1 q (increment)= 0x7fff669bb1a8
int
/char
/float
在双指针中的作用是什么?
在 int **p
中,您将指针增加它指向的大小(即指针)。由于指针的大小为8
,它将增加8
。
最终类型在这里没有作用。它的行为与指向 void
.
引用后缀 ++
运算符的 属性,来自 C11
,章节 §6.5.2.4,后缀递增和递减运算符, (强调我的)
The result of the postfix
++
operator is the value of the operand. As a side effect, the value of the operand object is incremented (that is, the value 1 of the appropriate type is added to it). [...]
在
int *p ;
的情况下,p是指向类型int
的指针,因此增量将基于sizeof(int)
在
int **p ;
的情况下,p是指向类型int *
的指针,因此增量将基于sizeof(int *)
好吧,这不仅取决于您的机器,还取决于您的实现。您可以通过输出 sizeof p
、sizeof r
和 sizeof q
来计算它们。打印 sizeof (int *)
、sizeof (char *)
和 sizeof (int **)
也有效。
C programmers traditionally like to know a lot (perhaps more than they need to) about the underlying machine implementation.
在我看来,你不需要知道这些东西,因为编译器会为我们处理得很好(根据 C 标准)。此外,大多数使用这些东西的实践本质上都是未定义的行为。