微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c ++指针的指针给出值?

如何解决c ++指针的指针给出值?

我想知道一件事,在长时间使用c#之后,我试图记住c ++ :) 一件事困扰着我,我不知道为什么会这样。 指针应该是指向内存某处的东西(它的地址) 并且指针的指针是指针的地址。简单吧? :D

让我们看一下这段代码

#include <iostream>

int main()
{
    int* TestMas = new int[10]
    {
        1,2,3,4,5,6,7,8,9
    };

    for (size_t i = 0; i < 10; i++)
    {
        printf("%d\t",*(TestMas+i));
    }
}

由于某些原因,将值而不是地址打印出来,它应该是*(TestMas + i)应该是数组指针的地址,但是如何打印值而不是地址呢? 如果我尝试使用&取消对指针的引用,则会收到xD的错误消息。

解决方法

TestMasint *或整数的地址。将其分配给new int[10]时,就是将其指向您保证属于您的内存中10个连续整数中的第一个。

因此,当您执行*(TestMas + i)时,您正在执行指针算术,然后取消对新指针的引用。请注意,恰好此操作的语法糖为TestMas[i]

如果您只想要地址,则可能要取消取消引用。所以就这样:

std::cout << TestMas + i;
,

TestMas是指向int的指针,而不是指向指针的指针。其类型为int *。指向int的指针为int **

TestMas + i也是指向int的指针,指向数组的第i个元素。 *(TestMas + i)在该指针上调用indirection运算符,该运算符返回指针操作数指向的对象或函数,而不是地址。

地址是(TestMas+i)本身的值。

您可以使用以下命令进行打印:

printf("%p\t",(TestMas+i) );

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。