C/Cpp / 参数传递时如何防止数组退化为指针
一、答案
函数参数使用数组引用。
二、栗子
#include <iostream>void print_1(int data[4])
{std::cout << sizeof(data) << std::endl;for (int i = 0; i < 4; i++)std::cout << data[i] << " ";std::cout << std::endl;
}void print_2(int (&data)[4])
{std::cout << sizeof(data) << std::endl;for (int i = 0; i < 4; i++)std::cout << data[i] << " ";std::cout << std::endl;
}int main()
{int myarray[] = {1, 2, 3, 4};print_1(myarray); print_2(myarray); return 0;
}
结果:
8
1 2 3 4
16
1 2 3 4
(SAW:Game Over!)
C/Cpp / 参数传递时如何防止数组退化为指针相关推荐
- 指针进阶(指针与数组传参、数组指针与指针数组、函数指针数组、回调函数的辨析)
指针 指针作为C语言中极具代表性的特征之一,也是C语言学习中的一大难点. 简单来说,指针我们需了解的最基础的即: 指针是一个用来存放地址的变量,地址唯一标识一块内存空间. 指针的大小是固定的4/8个字 ...
- 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 《C++ Primer 第五版》(第6.3~6.7节)——返回指向数组/函数的指针,函数重载,默认形参、inline函数和constexpr函数
1.返回指向数组/函数的指针 顾名思义,就是函数返回值为指向数组/函数的指针. 数组的性质:不能被拷贝,函数也不能返回数组.但可以返回数组指针/引用,声明一个返回数组指针的函数,有四种方式,一种是直接 ...
- 数组作为函数的参数传参时,数组名会退化为指针
1.数组作为函数的参数传参时,数组名会退化为指针 数组作为函数的参数传参时,数组名会退化为指针,数值传参时,需要把数值的长度一起传过去,另外,sizeof()运算符包含字符串的哨兵'/0',而strl ...
- 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针
之前的学习数组的文章中,已经知道一维数组作为函数参数的时候,最终会被编译器编译为指针.今天来看看二维数组的情形 文章目录 1 为什么C语言中的数组作为函数参数会退化为指针? 2 二维数组作为函数参数如 ...
- 【C 语言】数组作为参数退化为指针问题 ( 问题描述 | 从编译器角度分析该问题 | 出于提高 C 语言执行效率角度考虑 | 数组作为参数的推荐方案 )
文章目录 一.问题描述 二.从编译器角度分析该问题 三.数组作为参数的推荐方案 一.问题描述 将 数组 作为 函数参数 , 传递时会 退化为指针 ; 数组的首地址 , 变为指针地址 , 函数中无法判定 ...
- 【C 语言】数组 ( 多维数组做函数形参退化为指针过程 | int array[2][3] -> int array[][3] -> int (*array)[3] )
文章目录 一.多维数组做函数形参退化为指针过程 1.使用 int array[2][3] 作函数参数 2.使用 int array[][3] 作函数参数 3.使用 int (*array)[3] 作函 ...
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...
<Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?> <Java中的值传递和引用传递> 原理知识: 如果参数类型是原始类型,那么传过来的就是这 ...
最新文章
- Playmaker Input篇教程之PlayMaker菜单概述
- stm32中使用#pragma pack(非常有用的字节对齐用法说明)
- python 超时重试方法
- 审计文件的作用以及记录的内容,审计日志的记录,以及审计日志包括的内容
- 中石油训练赛 - Check List(线段树维护偏序问题)
- 16.04编译android 7.0,ubuntu16.04 编译Android5.1报错
- LoRa是怎样实现定位的
- 【转】Snackbar和Toast的花式使用,这一篇就够了
- C++:传递数组给函数
- 数据科学入门与实战:玩转pandas之一
- 1002 C语言输入解决方案
- 百度系无人车创业公司领骏科技完成新一轮融资
- linux把程序添加到全局环境变量
- Spark2.1.0模型设计与基本架构(下)
- 海康DS-2DY5223IW-DM
- SX1308锂电池升压1.5—3.7升5v1.5A 专为太阳能灯开发的DC/DC直流升压IC
- 人机交互新突破:百度发布主动多模态交互技术
- php制作搜索框_搜索功能(search.php)模板制作 - WordPress模板开发
- go内存分析工具介绍--pprof
- 基于51单片机的控制四线步进电机仿真设计
热门文章
- linux 定时执行shell脚本 定时任务
- 监控软件nagios之安装
- asp.net页面出错时的处理方法
- php中var_dump是什么意思,php中的var_dump()方法的詳細說明
- python数组随机分组_Python实用黑科技——以某个字段进行分组
- Fiddler抓包工具详解(五)(IOS、安卓抓包+fildder插件)
- 服务端第四次课程:MVC,控制器,视图渲染
- 使用three.js实现炫酷的酸性风格3D页面
- deepin v20.4设置全局搜索的快捷键
- wsl设置c盘自动挂载到wsl中的/c/目录下