为什么这个二进制转换不起作用?

0 c c++ binary

#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();
}
Run Code Online (Sandbox Code Playgroud)

请帮助这个二进制转换不起作用.我正在尝试x^n使用二进制转换进行计算.可以任意帮助??

Som*_*ude 6

您正在返回指向局部变量的指针.此变量存储在堆栈中,在函数返回后无效.

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

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

  • 虽然使用静态变量在技术上是正确的,但出于其他原因这是一个坏主意.请不要这样做. (2认同)