c语言数组怎么存储数据

数组持久存储数据并提供快速访问,但其固定大小使它们难以扩展。

C语言数组可以直接使用下标来访问。

示例:int arr[1 0];存储 1 0 个整数。

请注意,如果数组越界,就会出现问题。

对动态数组使用 malloc,并且不要忘记释放它们。

c语言怎么获取数组的长度

说实话,刚学C语言的时候,我对数组长度的理解也花了很长时间。
你提到的使用sizeof获取长度的方法是我当时遇到的一个坑,不得不给你点赞。

有趣的是,此方法特别依赖于定义数组的上下文。
例如,如果在main函数中定义了int data[4 ],则直接在main函数中使用sizeof(data)/sizeof(data[0])。
这是正确的。
编译器知道您定义了多少个整数。
但是当向子函数传递数据时,例如 void func(int a[4 ]),如果在 func 中使用 sizeof(a),它会立即崩溃。

我写了一个项目,想要统计用户上传的图像的行数。
用户通过API上传二进制数据。
收到数据后,我直接用sizeof计算长度,结果是一堆乱码。
后来我发现我传入的API参数是int,而不是原来的int[1 000]数组。
这就导致func中的sizeof(a)只计算了指针的4 个字节,完全不知道用户传递了多少行数据。

说白了,C语言的设计其实还蛮诚实的——它把数组名当成了指针,所以退出时原来的长度信息就丢失了。
如果要在子函数中计算长度,则必须传递一个附加参数,例如 int len。
或者用指向数组开头和结尾的指针传递它,例如int start,int end,end-start是长度。

我记得有一次用C写过一个嵌入式程序,我的记忆力非常紧张。
我有一个固定大小的缓冲区,想要动态处理数据。
首先我使用 sizeof(buffer) 来计算函数中的长度,但是当我运行它时,结果是段错误。
后来我改用传递缓冲区指针+长度参数,就是这样。
我自己没有运行过这个。
我记得数据在X左右,但我建议你检查一下。
指针大小可以在不同平台上更改。

对于VB来说,我当时做了很多VB.NET项目,数组操作实际上要容易得多。
VB中定义数组时,长度是固定的,不像C语言可以动态调整。
如果在VB中使用Array.Length,基本上不会出错。
两种语言的思想确实不一样。
C语言比较底层,需要你自己操心; VB更高级,封装了很多细节。

当我现在编写代码时,我通常会尽量避免在函数参数中传递大数组。
如果必须传递,则需要长度参数。
不过,如果你踩过很多坑,你就会知道C语言的这个特性是多么的细心。
你总结得很好。
关键是要理解指针和数组在内存中的性能差异。