尝试操作位时出现分段错误

segmentation fault while trying to manipulate bits

我正在阅读一本名为《计算机系统:程序员的视角》的书,以深入了解现代计算机的内部工作原理。

今晚我试图查看 int 和 unsigned 的内部,看看它们是由什么组成的。我想到了这个:

#include <stdbool.h>
#include <stdio.h>
typedef unsigned char * byte_pointer;
void bp2b(byte_pointer bp, bool bits[8]){
   unsigned char n;
   for (n = 0; n<8; n++){
      if (*bp & (1 << n))
         bits[7-n] = true;
      else bits[7-n] = false;
   }
}
void show_byte(byte_pointer bp){
   int ind;
   bool bits[8];
   bp2b(bp, bits);
   for (ind = 0; ind < 8; ind++){
      printf("%d",bits[ind]);
   }
   printf("\n");
}

int main(void){
   int x;
   x = 1;
   show_byte((byte_pointer) x);
}

为什么我会出现段错误?我对 C 的了解相当有限,所以请不要犹豫,指出对您来说显而易见的错误。

编辑:忘记了主要功能。

您正在将非指针值转换为指针:(byte_pointer) x 然后取消引用它,这是行不通的。尝试获取 x 的地址并将其转换为:(byte_pointer) &x

进行此更改,您的程序将 运行,但请注意,将 int 转换为 unsigned char 可能会导致信息丢失,因为 unsigned char 是比 int 更窄的类型(在大多数实现中).

设置 x = 255 将产生 11111111 而设置 x = 256 将产生 00000000.