#include<stdio.h>
#include<conio.h>
unsigned * bin(unsigned n) {
unsigned a[16];
int i = 0, j = 0;
for (i = 0; i < 16; i++) {
a[i] = n & 0x1;
n = n >> 1;
}
return a;
}
void main() {
unsigned n = 5;
int i = 0;
unsigned * a = bin(n);
for (i = 15; i >= 0; i--) {
printf("%d\n", (*(a + i)));
}
getch();
}
请帮助此二进制转换不起作用。我尝试使用二进制转换计算x^n
。
可以任意帮助??
答案 0 :(得分:6)
您正在返回指向局部变量的指针。该变量存储在堆栈中,在函数返回后无效。
取消引用此指针将导致未定义的行为。
解决方案是创建变量static
,或者将数组作为参数传递给函数,或者(如James Kanze的评论中所述)使用复制内容的类型。
答案 1 :(得分:2)
你不能以这种方式返回函数中定义的本地数组。
当函数完成执行时,数组的内容将被删除。
而不是使用
unsigned a[16];
您可以使用以下内容:
unsigned *a =malloc(16 * (sizeof *a));
当你的程序中一个数组变得无用时,不要忘记在你的主中释放为a
分配的内存。你可以用以下方式释放数组:
free(a);
答案 2 :(得分:0)
实际上,这是使用new
(或malloc
)是一个非常糟糕的选择的典型情况。但是,正如其他人所说,返回指向本地数组的指针是不好的。
相反,传入一个数组:
void bin(unsigned n, unsigned a[]) {
int i = 0;
for (i = 0; i < 16; i++) {
a[i] = n & 0x1;
n = n >> 1;
}
}
并在主要:
unsigned a[16];
bin(n, a);
现在您无需从bin
分配或返回数组。