sizeof和strlen(1)

sizeof和strlen

sizeof:

sizeof(数组名):数组总大小
sizeof(&数组名):整个数组的地址
除此之外,sizeof()均求首元素的地址
sizeof(*数组名):解引用,首元素的大小
sizeof(数组名):整个数组内元素个数
sizeof(数组名+0):首元素地址(与类型有关)
######c语言中各种数据类型的长度:

类型 32位 64位
char 1 1
short 2 2
int 4 4
long 4 8
long long 8 8
float 4 4
double 8 8
size_t 4 8
strlen:

找结束符
strlen(数组名):随机值
strlen(数组名+0):随机值
strlen(&数组名):随机值
strlen(&数组名+1):随机值-6
strlen(*数组名):错误,无法访问
strlen(数组名[1]):错误,无法访问

int main()
{
	int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));//16 整个数组大小 4*4
	printf("%d\n", sizeof(a + 0));// 4 首元素地址
	printf("%d\n", sizeof(*a));//4 首元素
	printf("%d\n", sizeof(a + 1));//4 第二个元素地址
	printf("%d\n", sizeof(a[1]));//4 第二个元素
	printf("%d\n", sizeof(&a));//4 数组的地址
	printf("%d\n", sizeof(*&a));//16 整个数组
	printf("%d\n", sizeof(&a + 1));//4 跳过一个数组指向4的后面
	printf("%d\n", sizeof(&a[0]));//4 首元素地址
	printf("%d\n", sizeof(&a[0]+1));//4  第二个元素的地址

    char arr[] = { 'a','b','c','d','e','f' };
	printf("%d\n", sizeof(arr));//6
	printf("%d\n", sizeof(arr + 0));//4 首元素地址 char4个字节 
	printf("%d\n", sizeof(*arr));//1
	printf("%d\n", sizeof(arr[1]));//1
	printf("%d\n", sizeof(&arr));//4
	printf("%d\n", sizeof(&arr + 1));//4
	printf("%d\n", sizeof(&arr[0] + 1));//4

	printf("%d\n", strlen(arr));//随机值
	printf("%d\n", strlen(arr + 0));//随机值
	printf("%d\n", strlen(*arr));//err
	printf("%d\n", strlen(arr[1]));//err
	printf("%d\n", strlen(&arr));//随机值
	printf("%d\n", strlen(&arr + 1));//随机值-6
	printf("%d\n", strlen(&arr[0] + 1));//随机值-1

    return0;
}
发布了37 篇原创文章 · 获赞 3 · 访问量 1114

猜你喜欢

转载自blog.csdn.net/weixin_43264873/article/details/102886161