1、C语言 数组长度的计算方法
#include<stdio.h>
int main() {
int arr[] = { 1,2,5,6,78,9 };//数组初始化
//sizeof函数介绍:计算表达式的字节数,int占据4个字节,char 一个字节
//数组的长度就可以表示为:数组所有元素的字节总数/数组类型(即单个元素)的字节数
int length = sizeof(arr) / sizeof(int);//计算得到length长度为6;
printf("%d", length);
return 0;
}
2.函数调用中计算数组长度
#include<stdio.h>
void test(int* arr) {
int length1 = 0;
length1= sizeof(arr) / sizeof(int);
printf("函数未调用中 数组所占字节大小:%d\n", sizeof(arr));
printf("函数未调用中 数组长度:%d\n", length1);
}
int main() {
int arr[] = { 1,2,5,6,78,9 };
int length = 0;
length = sizeof(arr) / sizeof(int);
printf("函数未调用前 数组长度:%d\n", length);
printf("--------------------------------------\n");
test(arr);//测试函数传入数组时,数组的长度变化
printf("--------------------------------------\n");
printf("函数未调用后 数组长度:%d\n", length);
}
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pCgKHcty-1661433548490)(C:\Users\hanxin\AppData\Roaming\Typora\typora-user-images\image-20220825190336565.png)]
由运行结果可知,在函数调用的时,传入的是数组的首地址,而系统无法识别数组正确的长度,只能得到传入数据指针大小(传入一次的数据,并不是指针的大小),本人电脑每次输入运行的是32位的,所以占据4个字节。
总结:函数中调用数组必须同时调用数组的长度。
3.字符串数组的长度和注意事项
字符串数组的结束会包含‘\0’
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
char arr[] = "hello world";//表面上看11个长度
int length = 0;
length = sizeof(arr) / sizeof(char);
//实际为12个,因为在系统中会自动向其填充一个字符'\0'
printf("sizeof求得 数组长度:%d\n", length);
printf("--------------------------------------\n");
int len = (int)strlen(arr);//所得长度不包含'\0'
printf("strlen求得 数组长度:%d\n", len);
//当需要循环遍历字符数组就会感受到差别
printf("\n-------使用sizeof作为限制条件时---------\n");
for (int i = 0; i < length; i++) {
printf("数组中第%d个数据是 :%c\n", i, arr[i]);
}
printf("\n-------使用strlen作为限制条件时---------\n");
for (int i = 0; i < len; i++) {
printf("数组中第%d个数据是 :%c\n", i, arr[i]);
}
}
运行结果:
例题:
注意实现’\0’ 和 循环的结束条件
参考答案在题解中,此处不做展示