我正在嘗試使用按參考呼叫通過函式列印陣列,但不斷收到警告:
passing argument 1 of 'test' from incompatible pointer type [-Wincompatible-pointer-types]
我嘗試用test(&arr, n);, test(arr, n);, test(*arr, n);, test(&arr[], n);,test(*arr[], n);替換test(&arr[], n);
但沒有任何效果,我做錯了什么?
#include<stdio.h>
void test(int *a[], int b);
void main()
{
int arr[]={1, 2, 3, 4, 5}, i, n=5;
test(&arr, n);
}
void test(int *d[], int n)
{
int i;
for(i=0; i<n; i )
{
printf("%d", *d[i]);
}
}
uj5u.com熱心網友回復:
如何將陣列傳遞給函式
只需使用陣列元素型別的指標:
void test(int *a, int b);
如果然后將陣列傳遞給函式:
test(arr);
... C 編譯器會將指向陣列 ( &(arr[0])) 的第一個元素的指標傳遞給函式。
&請注意,在這種情況下您不要使用。
在函式內部,您可以使用陣列操作:
void test(int * arr)
{
arr[3] = arr[2];
}
(在你的情況下printf("%d\n", arr[n]);:)
(對于任何型別的指標資料型別都是如此,除了void *.C 編譯器假定指標指向陣列的第一個元素,如果您使用指標資料型別的陣列操作。)
“從不兼容的指標型別傳遞 'test' 的引數 1”
據我所知,[]函式中的引數不被解釋為陣列,而是指標。為此原因, ...
void test(int *a[], int b);
...被解釋為:
void test(int **a, int b);
...這意味著 C 編譯器需要一個指向指標陣列 ( int *) 的指標,而不是整數陣列 ( int)。
uj5u.com熱心網友回復:
它比這簡單得多。在下面的示例中,我size_t用來表示陣列大小,它是專門用于該目的的無符號整數型別。
#include <stdio.h>
// you can use the size parameter as array parameter size
void test (size_t size, int arr[size]);
int main (void) // correct form of main()
{
int arr[]={1, 2, 3, 4, 5};
test(5, arr);
}
void test (size_t size, int arr[size])
{
for(size_t i=0; i<size; i ) // declare the loop iterator inside the loop
{
printf("%d ", arr[i]);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/435830.html
