C语言中sizeof怎么在自定义函数中正常工作
发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,本文小编为大家详细介绍"C语言中sizeof怎么在自定义函数中正常工作",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言中sizeof怎么在自定义函数中正常工作"文章能帮助大家解决疑惑,下面跟着小
千家信息网最后更新 2024年11月27日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安全错误
数据库的锁怎样保障安全
java 数据库事物锁
自建服务器ip和域名
冷战数据库
公交网络安全
儿童网络安全法读后感
对软件开发很感兴趣
力控数据库变量时间
2021网络安全新事件
互联网科技金融发展
广州市优速互联网科技是培训
千里江山服务器是剑门蜀道的么
银行软件开发部好不好考
什么是软件开发技术人员
CDN源服务器怎么做安全
c程序设计与网络技术
无主之地3亚洲服务器
服务器处理器怎么用
崇明区专业型数据库销售以客为尊
网络安全包括哪些方面
网络安全关注的问题
有杀气童话2服务器ios
天津大数据守时模块服务器云主机
亿加乐上海网络技术有限公司
网络安全员好学吗工作好找吗
数据库和php一样吗
我的世界服务器加载不出来了
手机rust加载不进去服务器
明月庄主服务器ip
软件开发工具模数转换
查询同名同姓人数数据库