数组参数和指针参数

简介: 数组参数和指针参数
一、引导

设计函数时,难免会把数组和指针传给函数,那么函数的参数该如何设计呢?

二、一维数组传参

参数可以是一维数组、数组元素同类型的指针变量(数组传参的本质是传首元素的地址)

int arr[10] = { 0 }

void test1(int arr[]){}//参数为一维数组
void test2(int arr[10]){}//函数参数设计为一维数组时,数组大小可以省略,甚至可以是随机值,因为该大小无用
void test3(int* arr) {}//参数为数组元素同类型指针
int main()
{
  int arr[10] = { 0 };
  test1(arr);
  test2(arr);
  test3(arr);
  return 0;
}

int* arr[20] = { 0 }

void test1(int *arr[]){}//参数为一维数组
void test2(int *arr[20]){}//参数为一维数组
void test3(int** arr) {}//参数为数组元素同类型指针
int main()
{
  int* arr[20] = { 0 };
  test1(arr);
  test2(arr);
  test3(arr);
  return 0;
}
三、 二维数组传参

参数可以是二维数组、数组指针(数组传参的本质是传首元素的地址,二维数组的首元素是第一行元素,即一维数组)

int arr[3][5] = { 0 }

void test1(int arr[3][5]) {}//参数为二维数组
void test2(int arr[][5]) {}//参数为二维数组时,数组的行数可以省略,但是列数不可省略
void test3(int(*arr)[5]) {}//参数为数组指针
int main()
{
  int arr[3][5] = { 0 };
  test1(arr);
  test2(arr);
  test3(arr);
  return 0;
}
四、一级指针传参

参数为一级指针

 

 

void test(int* p) {}//参数为一级指针
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int* p = arr;
  test(p);
  return 0;
}

反向思考:当函数参数为一级指针时,可以传入什么类型数据?

一级指针

一维数组的数组名

数据的地址(int、float、char……)

五、二级指针传参

参数是二级指针

 

void test(int** ptr) {}//参数是二级指针
int main()
{
  int a = 10;
  int* p = &a;
  int** pp = &p;
  test(pp);
  test(&p);
  return 0;
}

 

反向思考:当函数参数是二级指针时,可以传什么数据?

二级指针

一级指针地址

指针数组的数组名

目录
相关文章
|
4天前
|
存储 算法 安全
C++一分钟之-数组与指针基础
【6月更文挑战第19天】在C++中,数组和指针是核心概念,数组是连续内存存储相同类型的数据,而指针是存储内存地址的变量。数组名等同于指向其首元素的常量指针。常见问题包括数组越界、尝试改变固定大小数组、不正确的指针算术以及忘记释放动态内存。使用动态分配和智能指针可避免这些问题。示例代码展示了安全访问和管理内存的方法,强调了实践的重要性。
22 3
|
17天前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
14 1
|
17天前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
13 1
|
24天前
|
存储 C语言
字符指针变量与字符数组的比较
字符指针变量与字符数组的比较
24 3
|
24天前
|
存储 C语言
字符指针作为函数参数
字符指针作为函数参数
26 2
|
2天前
|
C语言
C语言----关于二维数组传参的本质相关的知识点(数组指针、指针数组)
C语言----关于二维数组传参的本质相关的知识点(数组指针、指针数组)
|
2天前
|
C语言
C语言--指针数组和数组指针的区别
C语言--指针数组和数组指针的区别
|
3天前
【洛谷 P1563】[NOIP2016 提高组] 玩具谜题(模拟+结构体数组+指针)
**摘要:** NOIP2016提高组的玩具谜题是一个编程挑战,涉及理解玩具小人在圆圈中的相对位置。题目要求解决一系列基于小人朝向(内或外)的左右数指令,来找到最终目标小人。输入包含小人数量、指令数、每个小人的朝向和职业,以及指令详情。输出是最后到达的小人的职业。给定的AC代码使用指针模拟环状数组,通过按位异或判断朝向来移动指针。样例展示了问题的解决过程。子任务有不同的数据规模和限制条件。
9 0
|
4天前
指针\指针和数组
指针\指针和数组
8 0
|
10天前
|
编译器 vr&ar C语言
C primer plus 学习笔记 第10章 数组和指针
C primer plus 学习笔记 第10章 数组和指针