当前位置: 首页 > news >正文

【C语言】数组参数和指针参数详解

在写代码的时候难免要把【数组】或者【指针】传给函数,那函数的参数该如何设计呢?

1 一维数组传参

#include <stdio.h>
void test(int arr[])//ok?
{}
void test(int arr[10])//ok?
{}
void test(int* arr)//ok?
{}
void test2(int* arr[20])//ok?
{}
void test2(int** arr)//ok?
{}
int main()
{int arr[10] = { 0 };int* arr2[20] = { 0 };test(arr);test2(arr2);return 0;
}

 答案:都是ok的。

arr[10]:因为传递的是数组的首元素地址,首元素是int类型,所以接收它的地址是一个 int* 类型,也可以用数组int arr[ ]来接收。

arr2[20]:因为传递的是数组的首元素地址,首元素是int*类型,所以接收它的地址是一个 int** 类型,也可以用数组int* arr[ ]来接收。

2 二维数组传参

void test(int arr[3][5])//ok?
{}
void test(int arr[][])//ok?
{}
void test(int arr[][5])//ok?
{}void test(int* arr)//ok?
{}
void test(int* arr[5])//ok?
{}
void test(int(*arr)[5])//ok?
{}
void test(int** arr)//ok?
{}
int main()
{int arr[3][5] = { 0 };test(arr);
}

答案:

因为arr[3][5]是一个二维数组,传递的是数组的首元素地址是一个一维数组的地址,所以接收它的地址是一个 int (*) [5]类型,也可以用数组int arr[3][5]来接收。

总结:二维数组传参,函数形参的设计只能省略第一个[ ]的数字。
因为对一个二维数组,可以不知道有多少行,但是必须知道一行多少元素。
这样才方便运算。

3 一级指针传参

#include <stdio.h>void print(int *p, int sz){int i = 0;for(i=0; i<sz; i++){printf("%d\n", *(p+i));}}int main(){int arr[10] = {1,2,3,4,5,6,7,8,9};int *p = arr;int sz = sizeof(arr)/sizeof(arr[0]);//一级指针p,传给函数
print(p, sz);return 0;}

思考:

当一个函数的参数部分为一级指针的时候,函数能接收什么参数?

答案:

 4 二级指针传参

#include <stdio.h>void test(int** ptr){printf("num = %d\n", **ptr);    
}int main(){int n = 10;int*p = &n;int **pp = &p;test(pp);test(&p);return 0;}

思考: 

当函数的参数为二级指针的时候,可以接收什么参数?

 

http://www.lryc.cn/news/375764.html

相关文章:

  • Tuple 元组
  • (资料收藏)王阳明传《知行合一》共74讲,王阳明知行合一音频讲解资料
  • 空气质量预报模式系统WRF-CMAQ
  • Collections.sort()方法总结
  • Java23种设计模式(二)
  • Web前端收入来源:探索多元化的盈利渠道
  • 抽象工厂模式(大话设计模式)C/C++版本
  • springboot宠物医院信息管理系统-计算机毕业设计源码04164
  • Leetcode Hot100之哈希表
  • Vision Transformer with Sparse Scan Prior
  • 笔记-python 中BeautifulSoup入门
  • Tomcat Websocket应用实例研究
  • leetcode-11-二叉树前中后序遍历以及层次遍历
  • Python基础学习笔记(十一)——集合
  • FineReport
  • 嵌入式就业前景好么
  • 为啥找对象千万别找大厂男,还好我不是大厂的。。
  • 如何查看k8s中service的负载均衡策略
  • Linux-DNS域名解析服务01
  • [c++刷题]贪心算法.N01
  • 推荐常用的三款源代码防泄密软件
  • Android 13 高通设备热点低功耗模式(2)
  • web前端任职条件:全面解析
  • 分析医药零售数据该用哪个BI数据可视化工具?
  • 如何使用芯片手册做软件开发?
  • 基于深度学习的文本翻译
  • Unity制作透明材质直接方法——6.15山大软院项目实训
  • 【HarmonyOS NEXT】如何通过h5拉起应用(在华为浏览器中拉起应用)
  • 模板方法模式(大话设计模式)C/C++版本
  • 数据提取:数据治理过程中的质量保障