数组参数和指针参数

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

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

二、一维数组传参

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

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;
}

 

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

二级指针

一级指针地址

指针数组的数组名

目录
相关文章
|
1月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
36 3
|
21天前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
25天前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
25天前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
25天前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
29天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
51 4
|
1月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
47 2
|
2月前
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
1月前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
39 1
|
2月前
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。