gpt4 book ai didi

c - C中的指针问题

转载 作者:行者123 更新时间:2023-12-04 11:50:29 25 4
gpt4 key购买 nike

您好,我正在尝试学习 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);
}

问候

最佳答案

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

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

然后,您需要在附加参数中传递大小。问题是,当你传递数组时,你实际上只传递了一个指针(编译器将创建一个指向数组第一个元素的临时指针)。所以你需要自己跟踪尺寸:

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]);
}

现在它可以工作了。还要将返回类型放在它们之前。一些编译器可能会拒绝您的代码,因为它不再符合最新的 C 标准,并且早已被弃用(省略返回类型是您使用旧 K&R C 编码的方式)。

关于c - C中的指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/783733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com