2026/5/20 14:43:02
网站建设
项目流程
在godaddy做网站贵吗,公司开通网站,网站域名如何注册,phpstud可以做几个网站数组作为参数
当数组作为参数传递的时候#xff0c;实际上传递的是数组的首地址#xff0c;在语法上来说传递的是一个指针变量。
#include stdio.h
#include string.hvoid getArrLen(char buffer[])
{printf_s(using sizeof: %zd\n, sizeof(buff…数组作为参数当数组作为参数传递的时候实际上传递的是数组的首地址在语法上来说传递的是一个指针变量。#includestdio.h#includestring.hvoidgetArrLen(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编译选项却没有看见内联优化。