小编sun*_*vip的帖子

是否更长寿命/更大范围的局部变量?

今天,当我编码时,这个问题发生在我身上.当我们想要定义和使用变量时,我们是否应该扩大其范围?特别是当在几个块语句中使用相同的变量时,这些块语句与这个变量之间没有任何关系.哪个更好?让变量在所有块语句之外,或在每个块语句中定义.给出一个这样的例子:

第一:

int vl_ret = 0;
int b = 1;
int c = 1;

if (b == 1)
{
    vl_ret = do_something();

    if (vl_ret == 1)
    {
        printf("1\n");
    }
    else
    {
        printf("0\n");
    }
}

if (c == 1)
{
    vl_ret = do_something();

    if (vl_ret == 1)
    {
        printf("1\n");
    }
    else
    {
        printf("0\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

或第二:

int b = 1;
int c = 1;

if (b == 1)
{
    iny vl_ret = do_something();

    if (vl_ret = 1)
    {
        printf("1\n");
    }
    else …
Run Code Online (Sandbox Code Playgroud)

c c++

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

如何在C中定义struct'Atom'?哪个更好?为什么?

ATOM表示指针,指向独占和常量字符串.'C'中的字符串应以'\ 0'结尾.

我将展示两种在'C'中定义'ATOM TABLE'结构的方法:

struct atom1 {
    struct atom1 *link;
    int len;
    char *str;
} *bucket[2048]
Run Code Online (Sandbox Code Playgroud)

struct atom2 {
    struct atom2 *link;
    int len;
    char str[1];
} *bucket[2048]
Run Code Online (Sandbox Code Playgroud)

所以,当我想为这两种类型的ATOM分配内存时,我也有两种方法.

// memory + 1 for '\0'
struct atom1 *p = malloc(sizeof(*p) + len + 1);
Run Code Online (Sandbox Code Playgroud)

// memory for '\0' is already in the define of struct atom
struct atom2 *p = malloc(sizeof(*p) + len);
Run Code Online (Sandbox Code Playgroud)

所以我们可以看到,当我们想要分配内存时,'atom2'看起来更好.但另一方面,如果我们想要访问字符串的内存,我们将打破'C'的规则,因为'char str [1];' 'atom2'中.

'atom2'真的很棒吗?

c data-structures

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

标签 统计

c ×2

c++ ×1

data-structures ×1