数组传入函数的空间复杂度判定疑问
关于sumArr函数空间复杂度的解析
首先明确结论:你对这个函数空间复杂度为**O(1)**的判断是正确的,笔记的说法存在错误。
核心原因:C语言数组参数的本质
在C语言中,函数参数列表里的int a[]是语法糖,实际等价于int* a——函数接收的只是一个指向数组首元素的指针,并不会复制整个输入数组。
函数的额外空间占用
这个函数执行时,额外分配的空间只有两个局部变量:
sum:一个int类型变量,固定大小i:循环变量,同样是固定大小的int类型
这些空间的大小和输入数组的长度n完全无关,属于常数级别的空间开销,因此空间复杂度是O(1)。
笔记错误的可能原因
笔记里说“数组被直接复制”是混淆了两种场景:
- 如果是在函数内部主动创建新数组(比如
int temp[size];或者malloc(size * sizeof(int))),那确实会占用O(n)的空间 - 但这个函数只是通过指针访问原数组,没有进行任何数组复制操作,不存在额外的O(n)空间开销
内容的提问来源于stack exchange,提问作者omrlv
相关产品推荐
相关产品推荐

