C语言中sizeof怎么在自定义函数中正常工作
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本文小编为大家详细介绍"C语言中sizeof怎么在自定义函数中正常工作",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言中sizeof怎么在自定义函数中正常工作"文章能帮助大家解决疑惑,下面跟着小
千家信息网最后更新 2025年11月07日C语言中sizeof怎么在自定义函数中正常工作
本文小编为大家详细介绍"C语言中sizeof怎么在自定义函数中正常工作",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言中sizeof怎么在自定义函数中正常工作"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
1、在main函数中,sizeof是可以正常工作的,比如:
int main(){ int n[5]; printf("input: \n"); int i ; for(i = 0; i < 5; i++) { scanf("%d",n + i); } int len = sizeof(n)/sizeof(n[0]); printf("%d\n",len); return 0;}2、但是在自定义函数中就不可以了,如下:
#includevoid print_1(int n[]){ int i; int len = sizeof(n)/sizeof(n[0]); printf("len : %d\n",len); for(i = 0; i < len; i++) { printf("%d",n[i]); } printf("\n");}int main(){ int n[5]; printf("input: \n"); int i ; for(i = 0; i < 5; i++) { scanf("%d",n + i); } print_1(n); printf("\n"); return 0;}
3、至于原因以及解决方法感觉有篇博客说的比较好
原因在于:第一,在c中,数组在作为参数的时候就退化为指针,对一个地址来取大小呢,如果是32位系统的话即为4,如果是64位系统的话为8,所以呢,在函数中sizeof获取的是指针的长度而不是数组的长度。第二呢,在函数中,sizeof的处理时间的在编译期,也就是说对于动态生成的数组大小是不能用sizeof来算出来的。
4、解决办法
第一种办法
把数组作为参数传入到数组的同时呢,也传入该数组的长度进去。不过该办法需要在函数外获取该数组的长度才传进去,略显麻烦。比如讲上述代码的打印函数的函数名print(int *n) ; 改成print(int *n ,int len);其中len代表数组n的长度
第二种办法
采用宏定义,但是这种方法个人感觉显得有些啰嗦
第三种办法
C++可以用vector等容器避免大部分数组的操作,对于字符数组也有string可以替代,也有可以传递数组大小的奇迹淫巧。如果你需要计算数组长度的函数,可以使用宏定义 或者 如果是C++,也用相应的模板技巧,这比宏定义安全。
templatelong calc(long (&array)[N]) // 利用模板传递参数 array是数组的引用{ long res = 0L; for (size_t i = 0;i < N;i ++) { res += array[i]; } return res;} int main(){ long longarr[] = {1, 23, 4, 45, 46, 57,}; long sum = calc(longarr);}
读到这里,这篇"C语言中sizeof怎么在自定义函数中正常工作"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
数组
函数
长度
办法
工作
语言
参数
大小
文章
内容
原因
感觉
指针
方法
模板
系统
C++
处理
妥当
安全
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全社会效益指标
朝阳区数据网络技术咨询软件
网络安全保护法的原因
电子竞技的软件开发
产品规划软件开发
采购数据库excel
关于网络安全在我心的手抄报
信息技术网络安全总结报告
360天擎网络安全软件
网页登录页面怎么连接数据库
昆明网络安全实战特训营收费标准
宝山区推广软件开发哪个好
建数据库是什么意思
小程序云数据库读取图片
nas可以挂载到多个服务器上吗
数据库三模式结构名词解释
rog幻14适合软件开发吗
移动ad hoc网络技术
如何打开并解释音频数据库
如何退出服务器管理控制台
好用的数据库插件
网络安全风险评估算法
永太科技工业互联网
vpn服务器 静态路由
win10数据库配置
app后台服务器发送数据
美国服务器租用报价
雪球 网络安全
无线网络技术实验指导书
ed2k电驴服务器列表