目录

回顾:

数组参数、指针参数

一维数组传参

二维参数传参

一级指针传参

二级指针传参


回顾:

前面关于指针的内容我们已经学习了指针数组和数组指针我们来一起看看下面的代码的意思

int arr[5] 这是一个数组,有五个元素,元素的类型是int型

int *parr[10] :这是一个数组,有10个元素,每个元素的类型是 int*类型的指针

int (*parr2)[10]:这是一个指针,该指针指向一个数组,数组有10个元素,元素的类型是int型

int (*parr3[10])[5]:这是一个数组,有10个元素,每个元素的类型是数组指针,该数组指针指向的

数组有5个元素,每个元素的类型是 int型。

数组参数、指针参数

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

一维数组传参

(这里为了观看我们先写主函数)

#include <stdio.h>

int main()

{

int arr[10] = { 0 };

int *arr[20] = { 0 };

test1(arr) ;

test2(arr2);

return 0;

}

1. void test1 (int arr[ ])

{ }

形参正确吗? test1的实参是一个数组,那么我用一个数组来接收当然也是真正确的

2. void test1( int arr[10])

{ }

这种形参也是正确的,理由和1相同,那有同学可能就会问,明明两个不同为什么正确的理由相同呢,我们不难发现这两种的区别就在于数组有么有定义元素的个数,其实在形参部分数组的个数是没有意义的,不管你定没定义,定义的大小多少都没有影响,当然了为了便于理解我们通常将元素的个数定义的与实参相同。实际上这里用数组来接收,在计算机看来这里的数组就是一个指针。

3. void test1(int *arr)

{ }

这个形参也是正确的。我们都知道,在传参时实参部分是一个数组名,也就是首元素地址,那我用存地址的指针来接收当然是正确的,上述的方式1 和方式2实质上就是这种传参。

4. viod test2(int *arr[20])

{ }

这个形参也是正确的,实参部分是一个指针数组,那我接收数据的形参也用指针数组当然是正确的,这里的20可以省略。

5. void test2(int **arr)

{ }

这里也是正确的,实参是一个指针数组数组名,也就是首元素地址,我们知道它的类型为int*,那么形参就可以用二级指针。

二维参数传参

#include<stdio.h>

int main()

{

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

test(arr);

return 0;

}

1. void test(int arr[3][5])

{ }

这里是正确的,形参是实参完全相同。

2. void test(int arr[][])

{ }

这种形参是错误的,列的大小不能省略。

3. void test(int arr[][5])

{ }

这是正确的形参。

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

4.test(int *arr)

{ }

错误,这里的arr接收的是一个int型的地址,二维数组的数组名代表的是第一行的地址也就是arr[0]的地址,故错误。

5. test(int *arr[5])

{ }

错误,形参的类型是指针数组,而实参是二维数组的数组名代表的是第一行的地址也就是arr[0]的地址,而指针数组不能用来存储二维数组的数组名,故错误。

6. void test( int (*arr)[5])

{ }

正确,形参是数组指针,意思是指针指向一个数组,这个数组有五个元素,类型为int型,而实参是二维数组的数组名代表的是第一行的地址,每一行有5个元素,所以是正确的。

7. void test(int** arr)

{ }

这里是错误的,我们是实参并不是一个一级指针,故不能有二级指针来接收。

一级指针传参

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

思考:

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

1.数组名;

2.指针;

二级指针传参

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

思考:

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

1.一级指针的地址;

2.指针数组的数组名;

3.二级指针;


本博客就分享的这里了! 以上若有错误请各位前辈指正!!!感激不尽^_^

【C语言进阶】指针(进阶2)相关推荐

  1. c语言程序设计指针进阶,C语言及程序设计进阶例程-15 指向结构体的指针

    贺老师教学链接  C语言及程序设计进阶 本课讲解 指向结构体变量的指针的应用 #include #include struct Student { int num; char name[12]; ch ...

  2. (C语言)指针进阶(1)——字符指针、数组指针

    初识指针结束啦,从本期开始,正式进入指针进阶部分. 目录 一.字符指针 二.数组指针 回顾关于数组名的理解 一.字符指针 在指针的类型中,我们知道有一种指针类型为字符指针char* 思考以下代码的输出 ...

  3. C语言篇+ 指针进阶(上)

    目录 一.前言 1.1进入主题 1.2牛刀小试 二.指针数组 1.1指针数组的初始化 1.2指针数组存放一维数组的地址 三.数组指针 1.1&数组名VS数组名 1.2数组指针的使用 1.2.1 ...

  4. 【C语言】指针进阶实践(指针数组和创建单链表)

    目录 1.指针数组 2.单链表创建 1.指针数组 编写程序,输入n(n<10)个字符,输出其中最长字符串的有效长度.要求自定义函数int max_len(char *s[] , int n),用 ...

  5. 【C语言】指针进阶 - 指针数组 数组指针 数组指针传参 函数指针 指向函数指针数组的指针

    目录 一.字符指针 一道题 二. 指针数组 解引用打印数组元素 &数组名 数组名 字符指针初始化 三.数组指针 取数组地址-放在数组指针里 类型 数组指针的使用 二维数组传参 判断 四.数组参 ...

  6. 【C语言】指针进阶(2)

    目录 函数指针 解析两段代码 函数指针数组 设计一个计算器 回调函数 模拟实现qsort函数 指针数组笔试练习 函数指针 存放函数地址的指针      int(*p)() int Add(int x, ...

  7. C语言之玩转指针(进阶)

    C语言之指针进阶 1.字符指针 2.指针数组 3.数组指针 3.1arr和&arr的比较 3.2数组指针的使用 4.数组传参和指针传参 4.1一维数组传参 4.2二维数组传参 4.3指针传参 ...

  8. C语言指针进阶(2)

    上一篇一起探讨了指针进阶的字符指针.指针数组和数组指针.这一篇我们继续来学习C语言指针进阶的第二部分,主要内容包括数组传参和指针传参.函数指针和函数指针数组. 目录 数组传参.指针传参 一维数组传参 ...

  9. [C语言][数据存储+指针进阶]关关难过关关过 迈向光明之路 而我义无反顾 冲

    //数据在内存的存储 //整形: char也归纳为了整形类型了  因为char字符对应的是ASCII值(相对应的具体数字) #include<stdio.h> int main()//调试 ...

  10. 【C语言必经之路——第14节】指针进阶(1)

    一.前言 在前面的两次初阶指针文章中有介绍一些关于指针的简单应用,通过那两次文章我们可以知道: 1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间. 2. 指针的大小是固定的4/8个字节(3 ...

最新文章

  1. 优化mysql服务器硬件包括_MySQL优化之一:服务器硬件和操作系统
  2. 破拆机器人_中国首台车载式遥控折叠装卸机器人横空出世
  3. spring依赖注入单元测试:expected single matching bean but found 2
  4. “纯金”卫星,撞向我们的“蛋壳时代”
  5. Redundant Binary Upload. There already exists a bi
  6. STL 去重 unique
  7. 巡回沙龙_美浮特全国巡回沙龙第一期结束撒花!
  8. C++ Primer笔记整理
  9. jsp标记之动作标记介绍
  10. Go实现简单TCP扫描器
  11. 哪吒汽车宣布获得上海银行总行20亿元综合授信额度
  12. 【NIO】dawn在buffer用法
  13. mysql sql语句集合
  14. 嵌入式linux串口编程(二)
  15. 表情包生成引流源码 - Jason原创
  16. matlab对语音信号预加重处理,语音信号的预加重处理和加窗处理 | 学步园
  17. 2021 App上架到 各应用商店(应用宝,华为,vivo,小米,AppStore)
  18. 基于Python的指数基金量化投资-全市场的市盈率和市净率计算
  19. oracle中常使用到的函数,Oracle经常使用到的函数
  20. 【渝粤教育】电大中专门店销售与服务技巧 (3)作业 题库

热门文章

  1. 毕业设计 推荐系统设计与实现 协同过滤推荐算法
  2. sqlzoo错题总结-1
  3. 计算机图像处理实验二 图像直方图及灰度变换
  4. excel表格怎么调整行高和列宽_如何在Excel中竖向批量插入图片,这个简单方法你知道吗...
  5. 新型前端学习成长计划路线规划
  6. Uboot中的MIPI DSI clk分析
  7. Pytorch深度学习笔记(七)逻辑斯蒂回归
  8. 关于信息熵 ,KL散度,交叉熵,一文读懂(bushi)。
  9. 苹果cms简洁精美影视模板整站源码
  10. 【Java 并发编程】我们为什么要学并发编程?