【问题标题】:What is difference between allocated memory and existing address in CPP? [duplicate]CPP中分配的内存和现有地址有什么区别? [复制]
【发布时间】:2021-10-14 12:23:44
【问题描述】:
int *n=new int;
*n=20;
cout<<n<<endl<<*n<<endl<<&n;

当编译上面的代码时,我得到的输出为

0xa41510 20 0x6ffe08

现在 'n''&n' 有什么区别。如果新内存分配给'n'那么为什么它的地址不同?

对不起,如果这有点愚蠢。

【问题讨论】:

  • 指针也是对象,所以&amp;n会给你指针本身的地址。 n 是分配内存的地址。
  • 提示:n&amp;nn是指针时的区别(如int*)和@987654328的区别一样@ 和 &amp;nn 不是指针时。
  • n 是保存new int 表达式返回值的变量。 &amp;n 是该变量的地址。变量的地址是它在内存中的位置,它的值由该位置的内容决定,而不是地址。同样,如果我们使用int x = 2x 将是保存值2 的变量,&amp;x 将是x 的地址(并且极不可能有2 的值) .

标签: c++ dynamic-memory-allocation


【解决方案1】:
     n
----------- 
| 0xa41510 |
------------
address : 0x6ffe08

--------
|  20  |
--------
 address : 0xa41510

当你写作时

int *n=new int

你说你需要一个内存来存储一个整数类型,所以 new 返回分配的内存位置的地址,然后存储在 n

声明后

*n=20

您已在 n

中存储的地址存储了 20 个

注意 : '*' 是间接或解引用运算符,应用于指针时,它访问指针指向的对象。

所以现在我们打印输出

std::cout<<n; 

prints 0xa41510 

As this is the value stored in n which is the address of memory location where 20 is stored

std::cout<<*n ;

prints 20 

> As it prints the value at the address stored in n

std::cout<<&n;  

prints 0x6ffe08 

> As it the address of n

注意

& 产生变量的地址

【讨论】:

    【解决方案2】:

    你可以认为'int*'是一个新类型,比如typedef int * INT_POINTER。 如果你理解了 int 和 int* 之间的关系,那么理解 INT_POINTER 和 INT_POINTER* 之间的关系是没有问题的。一样的。

    ex:) 下面两行的意思是一样的。

    int a = 0; int * b = &a;
    INT_POINTER c = new int; INT_POINTER* d = &c; 
    

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 1970-01-01
      • 2023-03-07
      • 2011-03-16
      • 2018-12-29
      • 2019-02-27
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多