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

为什么打印后值还是2?即使将地址更改为区域地址也会发生这种情况

如何解决为什么打印后值还是2?即使将地址更改为区域地址也会发生这种情况

我想使用带有只传递 2 个值的指针的 void 函数“返回”一个值。但是当我想打印出区域的值时。等于2,不是4。我试过把length++的地址改成area的地址,还是不行

#include <iostream>
    #include <ctime>
    void yes(int* lol,int* lol2);
    
    using namespace std;
    
    
    int main()
    {
        static int length,width,area;
        int* p;
        length = 2;
        width = 2;
        p = &length;
    
        yes(&length,&width);
    
        cout << length << " " << *(p+1);
        cout << endl;
        system("pause");
    }
    
    void yes(int* length,int* width)
    {
        int area;
        int* p=&area;
        area = *length * *width;
        length = length + 1;
        length = p;
    }

解决方法

替换

    length = length + 1;
    length = p;

    *length = *p;

或者更简单地去掉 p 并将其更改为

    *length = area;

length = p; 将指针从 p 复制到 length*length = *p; 将指针 p 指向的内容复制到 length 指向的位置。复制指针和复制指针指向的内容是有区别的。很多初学者关于指针的错误都是因为混淆了指针和指针指向的东西,这是两个不同的东西。

您不需要第二个指针 p,因此最简单的方法是摆脱它并使用 *length = area;。这会将 area 的值复制到 length 指向的位置。这就是你想要的(我认为)。

,

直接替换

length = length + 1;
length = p;

*length = *p;

你很高兴

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