C++函数传递数组方法及原理刨析

当数组作为函数形参的时候,正确的写法如下:

cpp 复制代码
//推荐写法
int printfArray(int a[], int num)
{
	int i = 0;
	for (i=0; i<num; i++)
	{
		std::cout<<a[i]<<std::endl;
	}
	return 0;
}

//不推荐写法
int printfArray(int* a, int num)
{
	int i = 0;
	for (i=0; i<num; i++)
	{
		std::cout<<a[i]<<std::endl;
	}
	return 0;
}

int main(int argc, char **argv)
{
    int a[10];
    printfArray(a,10);
    return 0;
}

上面两种写法都是正确的,之所以推荐用第一种写法,因为可读性更好一些,别人一眼就知道参数a是一个数组,而第二种写法不能直接看出a这个参数的意义。

有的同学就有疑问了,为啥两种写法都可以呢?

因为数组名字本身就是一个指针,它是一个指针常量,指向的地址不变。

比如定义了一个数组变量,编译器就会在内存中划分了一块地址空间给它,数组名这个指针常量就指向了这块内存空间的首地址,而数组首元素就存在这段内存空间的首地址处,即这段内存空间的首地址跟数组首元素的内存地址是一样的。

c++在这里插入代码片 复制代码
// c/c++编译器 会做优化,技术推演如下
int a[10]  --->int a[] ---->int *a

欢迎大家关注我的公众号,获取c++编程最新文章

相关推荐
xier_ran7 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
YangYang9YangYan8 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl28 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
程序员清风8 小时前
最短路径算法:BFS、Dijkstra 与 Floyd
java·算法·宽度优先
梦帮科技8 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
jimy19 小时前
c++的 Type Traits (一)
开发语言·c++
别动我齐刘海9 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
171320330计算机毕设编程9 小时前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法
姜鱼问生10 小时前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构