gpt4 book ai didi

c++ - 以不同方式打印整数指针元素时的不同结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:10:43 26 4
gpt4 key购买 nike

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

代码如下:

//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 方法:

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;
}

最佳答案

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

您的第一个输出有效的事实似乎只是运气,因为那时内存段没有被其他任何东西使用。

要解决此问题,您要么必须手动在堆上分配数组,要么使用容器之一(std::arraystd::vector).

关于c++ - 以不同方式打印整数指针元素时的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44225749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com