C语言中sizeof怎么在自定义函数中正常工作
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文小编为大家详细介绍"C语言中sizeof怎么在自定义函数中正常工作",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言中sizeof怎么在自定义函数中正常工作"文章能帮助大家解决疑惑,下面跟着小
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
科技金融是不是互联网金融
科技股互联网
鸠鸠互联网科技
科技互联网技术
西安互联网科技
互联网科技公司怎么样
互联网科技公司电话
齐家互联网科技
奇酷互联网科技公司
极限挑战互联网科技
汇久创客互联网科技
互联网 新科技
成都狮子座互联网科技
互联网科技如何创业
上海京穆互联网科技有限公司
怎样加入科技互联网
2021世界互联网领先科技成果发布
上海同邻互联网科技有限公司规模
北京互联网科技类企业分布
高科技和互联网的现代国家
互联网科技公司排名
互联网科技产业
互联网科技战争
互联网科技公司发展
平安科技 互联网
佰商互联网科技有限公司
互联网科技大会案例
互联网企业科技类企业如何做账
扫呗互联网科技有限公司
北京军民互联网科技公司