数组作为参数
2026/6/7 8:34:30 网站建设 项目流程

数组作为参数

当数组作为参数传递的时候,实际上传递的是数组的首地址,在语法上来说传递的是一个指针变量。

#include<stdio.h>#include<string.h>voidgetArrLen(charbuffer[]){printf_s("using sizeof: %zd\n",sizeof(buffer));printf_s("using strlen: %zd\n",strlen(buffer));}intmain(intargc,charconst*argv[]){charbuffer[]{"Hello World"};printf_s("sizeof(buffer) : %zd\n",sizeof(buffer));getArrLen(buffer);return0;}

考虑如上代码,main中的sizeof计算的是数组的长度,getArrLen中的sizeof计算的则是指针的大小,strlen计算的才是数组长度。因为在参数传递的过程中数组首地址变为了一个指针变量。

通过反汇编如上代码,我们可以发现在buffer的定义处调用sizeof实际上并没有计算buffer的长度,而是直接传递了一个立即数给printf_s,这是编译器优化的结果。因为buffer的长度在编译期间就可以确定了。

作为参数传递的时候才真正计算了buffer的长度。

strcpy和strlen

对于strcpy这个函数,编译器会使用xmm0这个寄存器来加速复制的过程。

书中说编译器会对这两个函数进行内联优化,我打开了O2编译选项,却没有看见内联优化。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询