Article Directory
Array parameter
One-dimensional array parameter transfer
void test(int arr[]){}//ok
//void test(int arr[10]){}//ok
//void test(int *arr){}//ok
void test2(int *arr[20]){}//ok
//void test2(int **arr){}//ok
int main()
{
int arr[10] = { 0 };
int *arr2[20] = { 0 };
test(arr);
test2(arr2);
return 0;
}
Two-dimensional array parameter transfer
//void test(int arr[3][5]){}//ok
//void test(int arr[][]){}//错误
//void test(int arr[][5]){}//ok
//void test(int *arr){}
//void test(int *arr[5]){}
//void test(int (*arr)[5]){}
//void test(int **arr){}
int main()
{
int arr[3][5] = { 0 };
test(arr);
return 0;
}
Pointer parameter
First-level pointer transfer
void print(int *p, int sz) {
int i = 0;
for (i = 0; i<sz; i++)
{
printf("%d\n", *(p + i));
}
}
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int *p = arr;
int sz = sizeof(arr) / sizeof(arr[0]);
//一级指针p,传给函数
print(p, sz);
return 0;
}
Second-level pointer transfer
void test(int** ptr)
{
printf("num = %d\n", **ptr);
}
int main()
{
int n = 10;
int* p = &n;
int **pp = &p;
test(pp);
test(&p);
return 0;
}
Function pointer
void test()
{
printf("hehe\n");
}
int main()
{
printf("%p\n", test);
printf("%p\n", &test);
return 0;
}
void test()
{
printf("hehe\n");
}
int main()
{
//下面那个有能力存放test函数的地址
//第一个可以
void(*pfun1)();
//void *pfun2();
return 0;
}
//代码1
(*(void (*)())0)();
//代码2
void(*signal(int, void(*)(int)))(int);