C语言计算数组长度

看了很多人的经验,在这里简单的总结一下

 

字符串计算数组长度是strlen(),不要忘记#include<string.h> 和它不带最后一个null就没什么大问题。

sizeof()函数,用来计算()内的对象或者类型所占的内存字节数。用其来计算数组长度的方式很简单,一般用:

	int a[3] = {1,2,3}
	int length = sizeof(a)/sizeof(int);

或者

	int a[3] = {1,2,3}
	int length = sizeof(a)/sizeof(a[0]);

我个人推荐使用下面这种。因为如果是下面这种写法,我们就可以提前定义:

#define Length(x) sizeof(x)/sizeof(x[0])

这样的写法会方便之后的使用

然而sizeof()函数还会出现一些问题,就是在传递参数中。例如:

#include <stdio.h>
#define Length(x) sizeof(x)/sizeof(x[0])
void test(int a[]){	// 这里也可以写成 void test(int *a),两者底层是一样的 
	printf("参数传递后算出的长度:%d",Length(a));
} 
main (){
	int a[6] = {1,2,3,4,5,6};
	printf("参数不传递算出的长度:%d\n",Length(a));
	test(a);
} 

从这里我们可以看到在传递参数之后,算出的结果不是我们想要的,为什么呢?首先我们要知道,在C中传递数组是一种什么样的概念:

首先,test( int a[])和test( int *a) 是一样的,也就是说,这个地方的形参a[]定义的实际上就是*a,也就是一个指针变量。至于为什么两个都能用,好像是因为看上去很形象或者是历史遗留问题?(别打我,我也不知道)反正两者定义的形参在底层都是一个指针变量,然而sizeof()只是算()里面对象所占的内存的,所以算出的当然就是1了。

所以,编程的时候要小心,最好定义数组的时候直接就把长度算出来。像这种感觉。

#include <stdio.h>
#define Length(x) sizeof(x)/sizeof(x[0])
main (){
	int a[6] = {1,2,3,4,5,6};
	int a_length;
	a_length = Length(a);
} 

 

参考文章:

https://blog.csdn.net/i_pangpang/article/details/80197865

编程环境:Dev-C++5.4.0

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值