我正在try 将位图初始化为所有位.我的 idea 是初始化一个缓冲区大小的数组,然后使用memcpy;然而:

#include <stdio.h>

#define SIZE 5

int main () {
  int i[SIZE] = { ~0 };
  for (int j = 0 ; j < SIZE ; j++) {
    printf("%d\n", i[j]);
  }
  return 0;
}

结果是:

-1
0
0
0
0

我的期望是,我会看到全部-1个.为什么这不起作用,我如何才能实现我的目标?

推荐答案

这一点:

int i[SIZE] = { ~0 };

仅将数组的第一个元素显式初始化为~0.其余的被隐式设置为0.

如果要设置所有位,则需要使用memset:

memset(i, ~0, sizeof i);

C++相关问答推荐

为什么写入系统调用打印的字符数不正确?

C指针算法在函数参数中的应用

如何跨平台处理UTF-16字符串?

C由四个8位整数组成无符号32位整数

如何在C客户端应用程序的ClientHello消息中添加自定义扩展?

为什么GCC C23中的关键字FALSE不是整数常量表达式?

用C宏替换strncMP函数中的参数

使用AVX2的英特尔2022编译器的NaN问题&;/fp:FAST

如何在C中打印包含扫描字符和整数的语句?

Square不与Raylib一起移动

如何计算打印二叉搜索树时每行所需的空间?

在句子中转换单词的问题

为什么我的二叉树删除删除整个左部分的树?

STM32 FATFS用户手册(Um1721)中的代码正确吗?

Malloc和对齐

如何解释数组中的*(ptr)和*(ptr+2)?

使用复合文字数组初始化的指针数组

c中数组上显示的随机元素

米斯拉映射到 klocwork 违规行为

使用字符数组声明和字符指针声明进行定义时,c 中的文字如何存储?