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;
}