不在C中声明数组大小

Nas*_*Ohi 1 c python arrays element

在Python中考虑这个简单的程序:

n=int(input("enter your lower limit"))
m=int(input("enter your higher limit"))
list=[]
x=n
while x<=m:
    if (x%2==0):
        list.append(x)
    x+=1
print("the even numbers in your range are:",end="")
print(len(list))
Run Code Online (Sandbox Code Playgroud)

在这里,我最初可以将列表的元素声明为空,并继续在其中插入结果,其范围完全取决于用户.然后我可以检查该列表的长度,因此有多少元素满足了用户范围之间的条件.所以在Python中变得容易!

但是在C中,我必须首先声明一个数组的元素数量!我可以将它声明为随机大数,然后继续插入结果.然后通过检查角色前面有多少元素,找出最终结果(有多少元素符合用户范围之间的条件)\0.但它仍会浪费大量内存并在未使用的元素中保留垃圾,这可能会导致更大的程序出现问题!

好!我知道一点malloc().但我必须在这里声明尺寸!虽然我可以在以后释放内存,这可以减轻更大程序中的压力,但我真的想知道在C中是否存在像Python一样简单的过程?

Ker*_* SB 7

您需要动态数据集,例如动态分配的数组.您可以使用malloccalloc创建初始数组,并realloc更改其大小.但要注意测试是否成功:

Foo * array = calloc(25, sizeof(Foo));         // space for 25 Foo's, zeroed out
// test for "array != NULL"                    // "25" can be a dynamic value

// use array[0], array[1], ..., array[24]


Foo * tmp = realloc(array, 250 * sizeof(Foo)); // extend to 250 elements
if (tmp) { array = tmp; }
else     { /* error! */ }

// use ... array[249]


free(array);                                   // clean up
Run Code Online (Sandbox Code Playgroud)

或者,您可以实现任何其他动态数据结构,例如链接列表或树,并分别为每个元素(每个节点)分配/释放空间,并以某种方式跟踪它们.连续数组只是最简单,最直接的动态数据结构,但它适用于许多场景.