小编Nik*_*ani的帖子

有没有办法打印位而不使用C中的循环?

现在,我做的是这样的:

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)会很棒.

c bit-manipulation

9
推荐指数
1
解决办法
396
查看次数

是否始终保证局部变量的地址有效

我在编译器中遇到警告:"地址永远不会为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.

c pointers

3
推荐指数
1
解决办法
232
查看次数

使用 data.table 中的列名选择多个范围的列

假设我有一个数据表,

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, …

r data.table

1
推荐指数
1
解决办法
1351
查看次数

未初始化指针的奇怪行为

我用未初始化的指针观察这种奇怪的行为.

从下面的示例中可以看出,有时它会打印一个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)

c pointers

0
推荐指数
1
解决办法
503
查看次数

标签 统计

c ×3

pointers ×2

bit-manipulation ×1

data.table ×1

r ×1