数组长度的计算 C语言 sizeof与strlen 数组中使用

发布于:2023-01-04 ⋅ 阅读:(343) ⋅ 点赞:(0)

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’ 和 循环的结束条件
参考答案在题解中,此处不做展示