当前位置 : 主页 > 编程语言 > c语言 >

数组和函数的传参方式

来源:互联网 收集:自由互联 发布时间:2023-08-28
一、一维数组传参 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】
上一篇:C++面试八股文:std::vector了解吗?
下一篇:没有了
网友评论