一、一维数组传参 1.传数组整体 格式:(以int型举例) (1)给函数传参时,用数组名arr; (2)函数定义时,接收用int arr[10] 或者int arr[] ; (3)在函数中打印元素时,用arr[0]。 2.传
一、一维数组传参
1.传数组整体
格式:(以int型举例)
(1)给函数传参时,用数组名arr;
(2)函数定义时,接收用int arr[10] 或者 int arr[] ;
(3)在函数中打印元素时,用arr[0]。
2.传首元素地址
格式:
(1)给函数传参时,用数组名arr;
(2)函数定义时,接收用int*p ;
(3)在函数中打印元素时,用p[0]或者*(p+i)。
3.例题
有一指针数组int*arr[10] , 请问它如何传参?
void test1(int* arr[10]) { //传整体
printf("%p\n", arr[9]);
}
void test2(int** p) { //传指针,因为数组元素本身为指针,所以指针的地址用二级指针存
printf("%p\n", *(p + 9));
}
int main() {
int* arr[10] = { 0 };
test1(arr);
test2(arr);
return 0;
}
二、二维数组传参
1.传数组整体
格式:
(1)给函数传参时,用数组名arr;
(2)函数定义时,接收用int arr[3][5]或者int arr[][5];(行可以省略,列不能省略:把二维数组看作元素为一维数组的一维数组,它本身有几个元素可以省略,所以可以省略行标,但它的元素是什么东西必须明确,所以不能省略列标)
(3)在函数中打印元素时,用arr[1][1]。
void test(int arr[3][5]) {
printf("%d", arr[1][1]);
}
int main() {
int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
test(arr);
return 0;
}
2.传首元素地址
二维数组的首元素地址为第一行数组的指针(把二维数组看作元素为一维数组的一维数组)
格式:
(1)给函数传参时,用数组名arr;
(2)函数定义时,用int (*p)[5]接收,表示传过来的是数组指针;
(3)在函数中打印元素时,用(*(p+1))[1]或者(*(*(p + 1)) + 1)。(打印arr[1][1])
void test(int (*p)[5]) {
printf("%d\n", (*(p+1))[1]); //p+1表示第二行数组的地址,*(p+1)表示第二行数组,(*(p+1))[1]表示第二行数组的第二个元素
printf("%d\n", *(*(p + 1) + 1)); //同理,*(p+1)表示第二行数组,即第二行数组的首元素地址,*(p + 1) + 1,表示第二行数组的第二个元素的地址,*(*(p + 1) + 1)表示第二行数组的第二个元素
}
int main() {
int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
test(arr);
return 0;
}
三、函数传参
格式:
(1)给函数传参时,用函数名add或者&add;
(2)函数定义时,接收用函数指针int (*p)(int,int) ;
(3)在函数中打印元素时,用(*p)(2, 3)或者p(2, 3)。
以下是把add函数传递给test函数打印
int add(int a, int b) {
int z = a + b;
return z;
}
void test(int (*p)(int,int)) {
printf("%d", (*p)(2, 3));
printf("%d", p(2, 3));
}
int main() {
int a = 2;
int b = 3;
test(&add);
test(add);
return 0;
}
回调函数:像add函数这样,作为参数传递给另一个函数,那么我们称add函数为回调函数
【文章原创作者:韩国服务器租用 http://www.558idc.com/lg.html 复制请保留原URL】