C++ C+中的指针+;同一变量有两个不同的地址

C++ C+中的指针+;同一变量有两个不同的地址,c++,pointers,C++,Pointers,通常,使用此代码,我们应该获得相同的指针地址: 如果我们通常有这样一个代码,i和&i指向同一地址 int *i=NULL; int k=5; i=&k; printf("%p %p",&i,i); 以下是printf的结果(只有最后一位不同):0x7fff5fbff8b8 0x7fff5fbff8b4 谁能解释一下原因吗?因为它们不一样i是包含变量k地址的指针,&i是包含变量i地址的指针,因为它们不相同i是包含变量k地址的指针,&i是包含变量i地址的指针i是指向整数的指针i的值

通常,使用此代码,我们应该获得相同的指针地址: 如果我们通常有这样一个代码,
i
&i
指向同一地址

int *i=NULL;
int k=5;
i=&k;
printf("%p %p",&i,i);
以下是printf的结果(只有最后一位不同):
0x7fff5fbff8b8 0x7fff5fbff8b4


谁能解释一下原因吗?

因为它们不一样
i
是包含变量
k
地址的指针,
&i
是包含变量
i
地址的指针,因为它们不相同
i
是包含变量
k
地址的指针,
&i
是包含变量
i
地址的指针
i
是指向整数的指针
i
的值是一个地址(k的地址)

&i
i
的地址

您只需输出两个不同的地址

您可以这样做:

#include <cstdio>

int main()
{
   int *i=NULL;
   int k=5;
   i=&k;
   int** j = &i;
   printf("%p %p %p",&i,i,j);
}

请看第一个地址与第三个地址相同。因为
j
的值是
i
的地址。

i
是指向整数的指针
i
的值是一个地址(k的地址)

&i
i
的地址

您只需输出两个不同的地址

您可以这样做:

#include <cstdio>

int main()
{
   int *i=NULL;
   int k=5;
   i=&k;
   int** j = &i;
   printf("%p %p %p",&i,i,j);
}

请看第一个地址与第三个地址相同。因为
j
的值是
i
的地址。

@Zaibis它是。这就像数字
42
是一个常数,但也是一个
int
。引用C++11§5.3.1:一元
&
运算符的结果是指向其操作数的指针。@Yu Hao,好吧,但C标准对它的描述有点不同;)引用ISO/IEC 9899:TC3 6.5.3.2
3一元运算符&生成其操作数的地址。如果操作数的类型为“type”,则结果的类型为“pointer to type”。
它表示返回类型为指针类型,但这并不意味着它是指针,因为
int foo(void){return 5;}
的结果类型为
int
,但不能说
foo()
是一个itneger;D@Zaibis在C中类似。您引用的标准与函数返回类型无关。根据结果,作为另一个示例,
1+2
的结果的类型为
int
。我想你的意思是,
&I
不是指针变量,但我的观点是它仍然是指针。
Apointer类型可能来自函数类型、对象类型或不完整类型,称为引用类型。指针类型描述一个对象,其值提供对所引用类型的实体的引用。从引用类型T派生的指针类型有时称为“指向T的指针”。从引用类型构造指针类型称为“指针类型派生”。
hm ohkay。。。。你跟我打赌。。。。但无论如何,它并没有说它是正确的。这就像数字
42
是一个常数,但也是一个
int
。引用C++11§5.3.1:一元
&
运算符的结果是指向其操作数的指针。@Yu Hao,好吧,但C标准对它的描述有点不同;)引用ISO/IEC 9899:TC3 6.5.3.2
3一元运算符&生成其操作数的地址。如果操作数的类型为“type”,则结果的类型为“pointer to type”。
它表示返回类型为指针类型,但这并不意味着它是指针,因为
int foo(void){return 5;}
的结果类型为
int
,但不能说
foo()
是一个itneger;D@Zaibis在C中类似。您引用的标准与函数返回类型无关。根据结果,作为另一个示例,
1+2
的结果的类型为
int
。我想你的意思是,
&I
不是指针变量,但我的观点是它仍然是指针。
Apointer类型可能来自函数类型、对象类型或不完整类型,称为引用类型。指针类型描述一个对象,其值提供对所引用类型的实体的引用。从引用类型T派生的指针类型有时称为“指向T的指针”。从引用类型构造指针类型称为“指针类型派生”。
hm ohkay。。。。你跟我打赌。。。。但无论如何,它说的都不对^^非常感谢你的解释:)感谢:)非常感谢你的解释:)感谢:)