如何将数组和函数通过长尾的方式进行参数传递?

2026-04-12 02:521阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计998个文字,预计阅读时间需要4分钟。

如何将数组和函数通过长尾的方式进行参数传递?

一、一维数组传参+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函数为回调函数

如何将数组和函数通过长尾的方式进行参数传递?

本文共计998个文字,预计阅读时间需要4分钟。

如何将数组和函数通过长尾的方式进行参数传递?

一、一维数组传参+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函数为回调函数

如何将数组和函数通过长尾的方式进行参数传递?