gpt4 book ai didi

C静态数组初始化和圈复杂度

转载 作者:太空宇宙 更新时间:2023-11-04 03:45:19 24 4
gpt4 key购买 nike

我有以下代码:

typedef struct A_{

void* values;
}A;

typedef struct C_{

int array_C[3][3];
}C;

typedef struct B_{

C c;
}B;

int main(void)
{
B* b;

A array_A[2] = {
{
&(b->c.array_C) \\ line 23
},

{
&(b->c.array_C) \\ line 27
}
};

return 0;
}

我的错误在第 23 行和第 27 行,其中指出 &(b->c.array_C) 应该是常量。我做错了什么?数组的地址不是常量?

我这样做的原因是因为我需要提高函数的圈复杂度有340个if语句,当每个if语句都具有以下形式时:

if( exspretion )
{
foo( address_of_array);
return false;
}

如果我将 340 个 if 语句更改为一个 while 循环,它运行 340 次并从上面的数组中获取 foo 函数的参数,那么圈复杂度会更好吗?

最佳答案

要解决您看到的错误,行:

B* b;  

可以改成:

B b, *pB;//create an instance of B, and a pointer to B at the same time. 
pB = &b; //now, pB is initialized to point at a real place in memory. (i.e. b)
//(use it instead of b in your code)

Main 现在看起来像这样:

int main(void)
{
B b, *pB;
pB = &b;

A array_A[2] = {
{
&(pB->c.array_C) // line 23
},

{
&(pB->c.array_C) // line 27
}
};
//assignments can now be made to the actual array elements
pB->c.array_C[0][0]=3;//for example

//Question: How are you planning on using array_A[0], array_A[1]? (A is a void *)

return 0;
}

关于圈复杂度
和你的问题:
...如果我将 340 个 if 语句更改为一个 while 循环...圈复杂度会更好吗?

一段源代码的

循环复杂度是通过源代码的线性独立路径数的计数。例如,如果源代码不包含 IF 语句或 FOR 循环等决策点,则复杂度将为 1,因为代码中只有一条路径。 (来自 HERE ))

for 循环在圈复杂度方面不会比 340 次顺序调用有所改进,但在可维护性和可读性方面,它将是一个很大的改进。

关于C静态数组初始化和圈复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25004185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com