0
#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使用二进制转换进行计算。有人可以帮忙吗??

4

3 回答 3

6

您正在返回一个指向局部变量的指针。该变量存放在栈上,函数返回后无效。

取消引用此指针将导致未定义的行为。

解决方案是创建变量static,或者将数组作为参数传递给函数,或者(如 James Kanze 的评论中所述)使用复制内容的类型。

于 2013-05-08T15:33:33.173 回答
2

您不能以这种方式返回函数中定义的本地数组。

当函数完成执行时,数组的内容将被删除。

而不是使用

 unsigned a[16];

您可以使用以下内容:

unsigned *a =malloc(16 * (sizeof *a));

并且不要忘记在您的主程序中释放为a数组在程序中变得无用时分配的内存。您可以使用以下方法释放数组:

free(a);
于 2013-05-08T15:32:50.097 回答
0

实际上,这是一个典型的案例,使用new(or 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.

于 2013-05-08T15:41:41.897 回答