C中的指针问题

2 c pointers

问候,我正在尝试学习C中的指针,我只是想让我的"addtwo"函数为输入整数数组的每个元素添加2,但我得到奇怪的编译错误,这里是非指针版本,确实不会正确编译.

addtwo(int *arr[]) {
    int i=0;
    for(;i< sizeof(arr)/sizeof(int);i++) {
        arr[i] = arr[i] + 2;
    }
}

main() {
    int myarray[] = {1,2,3,4};
    addtwo(myarray);
}
Run Code Online (Sandbox Code Playgroud)

问候

Joh*_*itb 7

你有一些问题.首先,您尝试将a传递int*给类型的参数int**.那不行.给它类型int*:

void addtwo(int *arr){
    int i=0;
    for(;i< sizeof(arr)/sizeof(int);i++){
        arr[i] = arr[i] + 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要在另一个参数中传递大小.问题是,当你传递数组时,你真的只传递一个指针(编译器将组成一个指向数组第一个元素的临时指针).所以你需要自己跟踪大小:

void addtwo(int *arr, int size){
    int i=0;
    for(;i<size;i++){
        arr[i] = arr[i] + 2;
    }
}


int main(void) {
    int myarray[] = {1,2,3,4};
    addtwo(myarray, sizeof myarray / sizeof myarray[0]);
}
Run Code Online (Sandbox Code Playgroud)

现在它会起作用.同时将返回类型放在它们之前.有些编译器可能会拒绝您的代码,因为它不再符合最新的C标准,并且长期以来一直被弃用(省略返回类型是您使用旧K&R C编写的方式).