[英]C - Trouble passing array reference to pointer argument in function
我無法將 integer 數組作為參考傳遞,然后修改原始數組。
#include <stdio.h>
// sets the 2 element of i to 5
void setToFive(int *i[10]){
*i[2] = 5;
printf("hello\n");
}
int main(){
int i[10];
setToFive(&i);
// confirm i[2] == 5
printf("%d\n", i[2]);
}
編譯器抱怨無效類型
[vinessa@komputilo ch1]$ gcc test.c
test.c: In function ‘setToFive’:
test.c:5:5: error: invalid type argument of unary ‘*’ (have ‘int’)
5 | *i[2] = 5;
| ^~~~~
test.c: In function ‘main’:
test.c:11:15: warning: passing argument 1 of ‘setToFive’ from incompatible pointer type [-Wincompatible-pointer-types]
11 | setToFive(&i);
| ^~
| |
| int (*)[10]
test.c:4:21: note: expected ‘int *’ but argument is of type ‘int (*)[10]’
4 | void setToFive(int *i){
| ~~~~~^
分段故障
[vinessa@komputilo ch1]$ ./a.out
Segmentation fault (core dumped)
幾個小時以來一直在努力解決問題,請幫忙。
給你
#include <stdio.h>
// sets the 2 element of i to 5
void setToFive(int *i){
i[2] = 5;
printf("hello\n");
}
int main(){
int i[10];
setToFive(i);
printf("%d\n", i[2]);
}
如果要更改數組的元素,只需按值傳遞即可。 在這種情況下,數組指示符被隱式轉換為指向其第一個元素的指針。 使用指針和指針算法,您可以更改數組的任何元素。
事實上,在這種情況下,您通過指向它們的指針間接地通過引用傳遞數組元素。
注意這些 function 聲明
void setToFive(int i[100]);
void setToFive(int i[10]);
void setToFive(int i[1]);
void setToFive(int i[]);
是等效的並且聲明相同的一個 function 聲明,編譯器將其調整為以下聲明
void setToFive(int *i);
這就是 function 處理指針的結果。
至於在這個 function 調用中用作參數的表達式
setToFive(&i);
那么它的類型為int ( * )[10]
因為指向的數組被聲明為
int i[10];
它與我已經寫過的參數int *i[10]
的類型不同,編譯器將其調整為int **
類型。
您正在傳遞一個指向整數的指針數組,而不是整數數組。 您可以刪除各種*
聲明和運算符,並只需傳遞一個簡單的數組作為參數(數組參數將衰減為指針):
#include <stdio.h>
// sets the 2 element of i to 5
void setToFive(int i[10])
{
i[2] = 5;
printf("hello\n");
}
int main()
{
int i[10];
setToFive(i);
// confirm i[2] == 5
printf("%d\n", i[2]);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.