sizeof与strlen的区别 数组的运算 字符指针

这篇博客是写数组的相关运算,主要涉及 sizeof操作符strlen函数、以及指针的使用

数组名代表整个数组的时候只有两种情况:

sizeof(数组名),这里的数组名代表整个数组。
&数组名,这里的数组名表示整个数组。

sizeof和strlen区别
1. strlen(char*)函数求字符串实际长度,遇到字符’\0’停止,不包含字符’\0’。 sizeof()返回的是变量所占内存数,不是实际长度。
2. strlen是函数,sizeof是操作符(关键字)。
3. sizeof可以用类型(int,float)做参数,也可以用函数做参数;strlen只能用char*做参数
4. 数组做sizeof的参数不退化,而数组传递给strlen就退化为指针。

32位机器指针的长度为4,64位机器指针的长度为8.

	int a[] = { 1, 2, 3, 4 };	//整形数组
	printf("sizeof(a):%d\n", sizeof(a));	//a指数组名,整个整型数组的长度
	printf("sizeof(a+0):%d\n", sizeof(a+0));	//a+0是指针,指针的长度
	printf("sizeof(*a):%d\n", sizeof(*a));	//*a指向数组的首元素,数组首元素的长度
	printf("sizeof(a+1):%d\n", sizeof(a+1));	//a+1是指针,指针的长度
	printf("sizeof(a[1]):%d\n", sizeof(a[1]));	//a[1]是指数组的第二个元素,数组元素的长度
	printf("sizeof(&a):%d\n", sizeof(&a));	//&a是 数组名的地址,指针的指针,即指针的长度
	printf("sizeof(&a+1):%d\n", sizeof(&a+1)); 	//&a的下一个地址,指针的长度
	printf("sizeof(&a[0]):%d\n", sizeof(&a[0])); 	//数组首元素的地址,指针的长度
	printf("sizeof(&a[0]+1)%d\n", sizeof(&a[0]+1));	//首元素地址的下一个地址,指针的长度

运算结果如下图:
在这里插入图片描述

char a[] = { 'a', 'b', 'c', 'd', 'e', 'f'};	//字符数组
	printf("sizeof(a):%d\n", sizeof(a));	//a为数组名,整个数组的长度
	printf("sizeof(a+0):%d\n", sizeof(a+0)); 	//a+0为指针,指针的长度
	printf("sizeof(*a):%d\n", sizeof(*a));	//*a为数组首元素,数组首元素的长度
	printf("sizeof(a+1):%d\n", sizeof(a+1));	//a+1为指针,指针的长度
	printf("sizeof(a[1]):%d\n", sizeof(a[1]));	//数组的第二个元素,数组元素的长度
	printf("sizeof(&a):%d\n", sizeof(&a));	//&a为数组名的地址,即地址的地址,地址的长度
	printf("sizeof(&a+1):%d\n", sizeof(&a+1)); 	//数组名地址的下一个地址,地址的长度
	printf("sizeof(&a[0]):%d\n", sizeof(&a[0])); 	//数组首元素的地址,地址的长度
	printf("sizeof(&a[0]+1):%d\n", sizeof(&a[0]+1));	//数组首元素地址的下一个地址,地址的长度

在这里插入图片描述

	char *a = "abcdef";	//字符串,a为字符指针
	printf("sizeof(a):%d\n", sizeof(a));	//指针的长度
	printf("sizeof(a+1):%d\n", sizeof(a+1)); 	//指针的下一个地址,仍为指针,指针的长度
	printf("sizeof(*a):%d\n", sizeof(*a));	//字符串的第一个位置,字符的长度
	printf("sizeof(a[0]):%d\n", sizeof(a[0]));	//字符串的第一个位置,字符的长度
	printf("sizeof(&a):%d\n", sizeof(&a));	//字符指针的地址,仍为指针,指针的长度
	printf("sizeof(&a+1):%d\n", sizeof(&a+1));  	//指针的下一个地址,仍为指针,指针的长度
	printf("sizeof(&a[0]+1)%d\n", sizeof(&a[0]+1));	//首元素地址的下一个位置,仍为指针,指针的长度

	printf("strlen(a) : %d\n", strlen(a));	//从a所指向位置开始的字符串长度
	printf("strlen(a+1) : %d\n", strlen(a+1));	//从a指向位置的下一个位置开始的字符串长度
	printf("strlen(&a[0] + 1) : %d\n", strlen(&a[0] + 1));	//从a指向位置的下一个位置开始的字符串长度

在这里插入图片描述

	int a[3][4] = { 0 };	//二维数组
	printf("sizeof(a):%d\n", sizeof(a));	//a为整个数组,整个数组的长度
	printf("sizeof(a[0][0]):%d\n", sizeof(a[0][0])); 	//第一行第一列元素的长度,int类型的长度
	printf("sizeof(a[0]):%d\n", sizeof(a[0]));	//第一行的长度,4*int类型的长度
	printf("sizeof(a[0]+1):%d\n", sizeof(a[0]+1));	//int类型的长度
	printf("sizeof(a+1):%d\n", sizeof(a+1));	//二维数组的第一个元素,int类型的长度
	printf("sizeof(&a[0]+1):%d\n", sizeof(&a[0]+1));  	//第一行元素的地址的下一个元素,地址的长度
	printf("sizeof(*a)%d\n", sizeof(*a));	//第一行元素的长度
	printf("sizeof(a[3])%d\n", sizeof(a[3]));	//第四行元素的长度

在这里插入图片描述
以上为个人理解,如有错误请指出!!!

猜你喜欢

转载自blog.csdn.net/lvxin15353715790/article/details/87880712