C语言中sizeof怎么在自定义函数中正常工作
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,本文小编为大家详细介绍"C语言中sizeof怎么在自定义函数中正常工作",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言中sizeof怎么在自定义函数中正常工作"文章能帮助大家解决疑惑,下面跟着小
千家信息网最后更新 2025年01月22日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安全错误
数据库的锁怎样保障安全
物理服务器有什么作用
软件监控服务器是什么
物联网监测数据库
美国采取的网络安全措施真实意图
网络安全受到威胁的上报计划
万灵山海之境服务器
关于沈阳软件开发产业
国家信息网络安全管理
数据库恢复SQL1005N
大学生网络安全问卷的疑惑
学术型网络安全学什么
珠海手机软件开发报价
泰坦陨落2一直连接服务器中
数据库表年龄怎么建立
创业型的软件开发公司
给我找网络安全小报
软件开发用最多的框架
导出数据库文件后怎么导入
软件开发流程网上销售报告
云代账互联网科技有限公司
软件开发转产品
物联网监测数据库
上海股票软件开发定制
adc 网络安全
服务器托管免费
网络安全法的安全行为
数据库时间加Z表示什么
冒险岛修改数据库不生效
赤峰市网络安全知识有奖答题
mysql数据库不能写