【发布时间】:2021-11-16 14:44:05
【问题描述】:
这个问题特别适用于数组。
在许多语言中,我会这样做:
#This is in python for simplicity:
def increment(mylist):
for i in mylist:
i += 1;
return mylist
mylist = {0,1,2,3}
mylist = increment(mylist)
我尝试了几种在 C 中返回数组的方法,但都没有像上面那样工作。似乎 C 根本不打算以这种方式工作。相反,我必须这样做:
#include <stdio.h>
increment(int *myarray, int size) {
for(int i = 0; i < size; i++){
myarray[i] += 1;
}
}
int main(){
int myarray[4] = {0,1,2,3};
increment(myarray, 4);
}
不用说,C 函数会改变数组的状态,因此是一个副作用函数。有充分的理由避免这种情况(这不是本问题的主题)。
有没有办法在 C 中避免这些类型的副作用?
【问题讨论】:
-
两种方式。要么将数组的副本发送到函数参数,要么将数组参数类型声明为
const *
标签: arrays c functional-programming state side-effects