指向int数组的指针提供与取消引用时相同的地址

杰森

我有以下代码:

#include <iostream>
using namespace std;
int main()
{
    int g[] = {9,8};
    int (*j)[2] = &g;
    cout << "*(j):" << *(j) << endl;
    cout << "j:" << j << endl;
    cout << "&j:" << &j << endl;
    cout << "&(*j)" << &(*j) << endl;
    cout << "*(*j):" << *(*j) << endl;
    return 0;
}

输出:

*(j):0x7fff5ab37c7c
j:0x7fff5ab37c7c
&j:0x7fff5ab37c70
&(*j)0x7fff5ab37c7c
*(*j):9

我认为j是指向两个整数的数组的指针。

&g是整个数组的地址。

然后j存储整个数组的地址。

因此,我使用*(j),它将取消引用数组中的第一个元素。

但是结果表明*(j)将数组地址存储为与j相同的值。

我不知道这是怎么发生的。

LihO

“我认为这j是指向数组的指针”

是的,是这也是为什么*j输出与输出相同的地址的原因g在这种情况下,数组会衰减到指针中,这就是为什么即使输出也会j产生相同结果的原因。

输出相同地址的事实可能使您认为j*j都是相同的指针,但事实并非如此。它们的类型不同(实际上很重要的事实):

int g[] = {9,8};     // int[]
int (*j)[2] = &g;    // int (*)[2]

因此使用*j变得等同于g直接使用,就像*(*j)变得等同于*g
&(*j)只是什么j,它使用数组的地址(从衰减g的地址,即该数组的第一个元素的地址)初始化的

那么为什么j*j输出相同的地址并*(*j)输出第一个元素的值呢?

因为类型的j存在int (*)[2]一个简单的例子:

int g[] = {9,8};
int (*j)[2] = &g;     // j points to the first element as well
cout << *((int*) j);

输出9

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么以下各项具有相同的值:指向数组的指针,指向数组的取消引用的指针?

来自分类Dev

取消引用的指针的地址

来自分类Dev

取消引用指向numpy数组或列表的void指针

来自分类Dev

取消引用指向numpy数组或列表的void指针

来自分类Dev

取消引用的指针构造的地址

来自分类Dev

如何取消引用指针地址?

来自分类Dev

指向数组元素地址的指针

来自分类Dev

指向数组去引用的指针

来自分类Dev

iOS:指向数组的指针引用

来自分类Dev

取消引用指向不再存在的框架的指针

来自分类Dev

取消引用指向不再存在的框架的指针

来自分类Dev

给变量指定与指向它的指针相同的地址

来自分类Dev

取消引用具有相同地址的指针将返回不同的结果

来自分类Dev

如何取消分配指向保存地址的指针的指针

来自分类Dev

为什么取消引用指向数组的指针时C程序崩溃?

来自分类Dev

用于取消引用指向固定大小二维数组的指针的 C typedef

来自分类Dev

指向int的const数组的指针

来自分类Dev

指向C中的int指针数组的指针

来自分类Dev

无法正确地取消引用指针并从内存地址数组中获取实际值

来自分类Dev

指向引用加数组之一的指针

来自分类Dev

数组访问导致空指针取消引用

来自分类Dev

取消引用的指针不能用作它指向的对象?

来自分类Dev

如何在 C 中取消引用指向 struct 的指针?

来自分类Dev

C ++ int指向数组的指针指向数组内存泄漏

来自分类Dev

管理指向int数组的指针的问题

来自分类Dev

指向int和char的指针(数组)

来自分类Dev

如何将指针引用动态大小的指针指向数组?

来自分类Dev

如何将指针引用动态大小的指针指向数组?

来自分类Dev

无效的内存地址或nil指针取消引用

Related 相关文章

  1. 1

    为什么以下各项具有相同的值:指向数组的指针,指向数组的取消引用的指针?

  2. 2

    取消引用的指针的地址

  3. 3

    取消引用指向numpy数组或列表的void指针

  4. 4

    取消引用指向numpy数组或列表的void指针

  5. 5

    取消引用的指针构造的地址

  6. 6

    如何取消引用指针地址?

  7. 7

    指向数组元素地址的指针

  8. 8

    指向数组去引用的指针

  9. 9

    iOS:指向数组的指针引用

  10. 10

    取消引用指向不再存在的框架的指针

  11. 11

    取消引用指向不再存在的框架的指针

  12. 12

    给变量指定与指向它的指针相同的地址

  13. 13

    取消引用具有相同地址的指针将返回不同的结果

  14. 14

    如何取消分配指向保存地址的指针的指针

  15. 15

    为什么取消引用指向数组的指针时C程序崩溃?

  16. 16

    用于取消引用指向固定大小二维数组的指针的 C typedef

  17. 17

    指向int的const数组的指针

  18. 18

    指向C中的int指针数组的指针

  19. 19

    无法正确地取消引用指针并从内存地址数组中获取实际值

  20. 20

    指向引用加数组之一的指针

  21. 21

    数组访问导致空指针取消引用

  22. 22

    取消引用的指针不能用作它指向的对象?

  23. 23

    如何在 C 中取消引用指向 struct 的指针?

  24. 24

    C ++ int指向数组的指针指向数组内存泄漏

  25. 25

    管理指向int数组的指针的问题

  26. 26

    指向int和char的指针(数组)

  27. 27

    如何将指针引用动态大小的指针指向数组?

  28. 28

    如何将指针引用动态大小的指针指向数组?

  29. 29

    无效的内存地址或nil指针取消引用

热门标签

归档