首页 > 其他分享 >【C语言】数组参数和指针参数详解

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

时间:2024-06-18 19:29:06浏览次数:21  
标签:arr ok int void C语言 详解 参数 数组 test

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

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

思考: 

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

 

标签:arr,ok,int,void,C语言,详解,参数,数组,test
From: https://blog.csdn.net/weixin_66400112/article/details/139781145

相关文章

  • 滚雪球学Java(65-3):详解Java IdentityHashMap的内部实现原理
      咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及JavaSE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~......
  • 【启明智显产品介绍】Model4 工业级HMI芯片详解系列专题(二):高清解码
    Model4工业级HMI芯片详解系列专题(二)【高清解码】Model4工业级HMI芯片集成了图形显示和编解码相关的硬件模块,为高清图像显示、高清视频播放和高清摄像头输入提供了强大的硬件基础:DE显示引擎:1个UI图层,1个VI图层,最高性能1080P@60fpsVI图层支持1/31.999x~32x......
  • JavaScript 的Blob 对象详解
    JavaScript的Blob对象详解:https://blog.csdn.net/qq_41152573/article/details/136225387?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171870454816800227415776%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=17187045481680......
  • 电池离线参数辨识
    一、电池模型确定  综合模型精度与工程应用复杂度分析,采用二阶RC电路模型,能在较小的计算量下得到更好的精度。等效电路如图1所示。图1、二阶RC等效电路模型二、HPPC测试  在上一篇已经详细介绍过电池充放电测试的具体流程,通过HPPC实验获得电池的电压工作曲线如图2......
  • 【python】pandas:DataFrame详解
    DataFrame是Pandas库中的一个核心数据结构,用于处理和分析表格型数据。以下是关于DataFrame的详细介绍:1.定义DataFrame是一个二维的表格型数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值等)。DataFrame可以被视为一个电子表格或SQL表,或是由多个Seri......
  • 详解setTimeout()
    原文链接:https://blog.csdn.net/weixin_44179269/article/details/1134207671,setTimeout()基础setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。vartimerId=setTimeout(func|code,delay)1上面代......
  • 揭秘In-Context Learning(ICL):大型语言模型如何通过上下文学习实现少样本高效推理[示
    揭秘In-ContextLearning(ICL):大型语言模型如何通过上下文学习实现少样本高效推理[示例设计、ICL机制详解]自GPT-3首次提出了In-ContextLearning(ICL)的概念而来,ICL目前已经变成了一种经典的LLMs使用方法。ICL,即In-ContextLearning,是一种让大型语言模型(LLMs)通过少量标注样本在......
  • C语言队列操作及其安全问题
    在C语言中,队列是一种常用的数据结构,特别适用于嵌入式开发中的任务调度、缓冲区管理等场景。下面是一个简单的循环队列的模板代码,它使用数组来实现队列,并提供了基本的入队(enqueue)和出队(dequeue)操作。示例代码如下:#include<stdio.h>#include<stdbool.h>#include<string.h>......
  • python函数声明(参数/返回值注释)和三个双引号用法
     1#python的"""三个双引号两种用法:(1)多行注释(2)定义多行字符串2deff1(ham:42,eggs:int='spam')->"Nothingtoseehere":3print("函数注释",f1.__annotations__)#函数注释{'ham':42,'eggs':<cl......
  • 栈的实现详解
    目录1.栈1.1栈的概念及结构1.2栈的实现方式1.3栈的应用场景2.栈的实现2.1结构体2.2初始化2.3销毁2.4入栈2.5出栈2.6获取栈顶元素2.7判空2.8获取个数3.test主函数4.Stack.c文件5.Stack.h文件6.运行展示1.栈1.1栈的概念及结构栈:一种特殊的线性表......