现在,我做的是这样的:
void print_bits(unsigned int x)
{
int i;
for(i=WORD_SIZE-1; i>=0; i--) {
(x & (1 << i)) ? putchar('1') : putchar('0');
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
另外,有一个独立于字大小的解决方案(在我的例子中当前设置为32)会很棒.
我在编译器中遇到警告:"地址永远不会为NULL"
代码如下所示:
struct mydata * var = NULL;
/* some function which may modify var*/
if(NULL != &var) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
实际警告(-Werror已标记):
error: the comparison will always evaluate as 'true' for the address of 'var' will never be NULL [-Werror=address]
那么这是否意味着局部变量的地址总是非NULL?比较它是一个错字&var.
假设我有一个数据表,
dt = data.table(matrix(1:50, nrow = 5));
colnames(dt) = letters[1:10];
> dt
a b c d e f g h i j
1: 1 6 11 16 21 26 31 36 41 46
2: 2 7 12 17 22 27 32 37 42 47
3: 3 8 13 18 23 28 33 38 43 48
4: 4 9 14 19 24 29 34 39 44 49
5: 5 10 15 20 25 30 35 40 45 50
Run Code Online (Sandbox Code Playgroud)
我要选择像列的几个不连续的范围:a, …
我用未初始化的指针观察这种奇怪的行为.
从下面的示例中可以看出,有时它会打印一个NULL值,而有些则会以交替的方式打印一个有效的地址.
为什么会这样?
代码:
int *i;
printf("%p\n", i);
Run Code Online (Sandbox Code Playgroud)
输出:(
零)
代码:
int *i;
printf("%p\n", i);
int *j;
printf("%p\n", j);
Run Code Online (Sandbox Code Playgroud)
输出:
0x7fff2d0c1b50
(无)
代码:
int *i;
printf("%p\n", i);
int *j;
printf("%p\n", j);
int *k;
printf("%p\n", k);
Run Code Online (Sandbox Code Playgroud)
输出:(
无)
0x7fffda5284b0
(无)
代码:
int *i;
printf("%p\n", i);
int *j;
printf("%p\n", j);
int *k;
printf("%p\n", k);
int *l;
printf("%p\n", l);
Run Code Online (Sandbox Code Playgroud)
输出:
0x400510
(无)
0x7fff6d7089c0
(无)
代码:
int *i;
printf("%p\n", i);
int *j;
printf("%p\n", …Run Code Online (Sandbox Code Playgroud)