首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >整数指针打印元素时的不同结果

整数指针打印元素时的不同结果
EN

Stack Overflow用户
提问于 2017-05-28 09:28:20
回答 3查看 125关注 0票数 1

我有一个整数数组:int* b,它的值是为元素0到7设置的。当我单独打印出每个元素时,我得到正确的元素。然而,当我使用for循环时,我得到了不同的结果。知道为什么吗?

下面是代码:

代码语言:javascript
复制
//toBinary(int x) returns an int pointer whose value is an array of size 8: int ret[8]
int* b = toBinary(55);

//Print method 1 (Individual printout)
cout << b[0] << b[1] << b[2] << b[3] << b[4] << b[5] << b[6] << b[7] << endl;

//Print method 2 (for loop)
for (int t = 0; t < 8; t++) 
    cout  << b[t];
cout << endl;

第一次打印的结果如下:00110111,这是正确的打印输出。

当我使用第二种技术打印时,它说,-858993460-85899346051202679591765470927361022170810222364 --这是错误的打印输出。

为什么我有两种不同的指纹?

下面是toBinary方法:

代码语言:javascript
复制
int* toBinary(int i) {

    int byte[8];
    for (int bit = 7; bit >= 0; bit--) {
        if (i - pow(2, bit) >= 0) {
            byte[7-bit] = 1;
            i -= pow(2, bit);
        }
        else
            byte[7-bit] = 0;

    }
    return byte;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-28 09:32:20

toBinary方法返回局部变量的地址。当函数退出时,byte将被删除。

事实上,您的第一个输出工作似乎只是运气,因为内存段没有任何其他使用在这一点上。

要解决这个问题,要么必须手动分配堆上的数组,要么使用其中一个容器(std::arraystd::vector)。

票数 7
EN

Stack Overflow用户

发布于 2017-05-28 09:42:28

其他答案已经触及了这里的问题所在,我想强调的是,您的代码是反现代的C++,您确实应该使用std::vector (如果您有C++11)来解决所有这些问题:

代码语言:javascript
复制
#include <vector>

std::vector<int> toBinary(int i) {

    std::vector<int> byte(8);
    for (int bit = 7; bit >= 0; bit--) {
        if (i - pow(2, bit) >= 0) {
            byte[7-bit] = 1;
            i -= pow(2, bit);
        }
        else
            byte[7-bit] = 0;

    }
    return byte;
}

然后..。

代码语言:javascript
复制
std::vector<int> b = toBinary(55);

//Print method 1 (Individual printout)
cout << b[0] << b[1] << b[2] << b[3] << b[4] << b[5] << b[6] << b[7] << endl;

//Print method 2 (for loop)
for (int t = 0; t < 8; t++) 
    cout  << b[t];
cout << endl;
票数 4
EN

Stack Overflow用户

发布于 2017-05-28 09:34:08

通过toBinary,您将返回一个局部变量,该局部变量在函数调用结束后将被释放。必须使用堆为数组分配内存。然后返回该指针并将其收集到变量b中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44225749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档