#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
//int a[] = { 9,5,2,7 };
//printf("%d\n", sizeof(a));//16 数组的大小
//printf("%d\n", sizeof(a + 0));//4 int*
//printf("%d\n", sizeof(a));//4 int
//printf("%d\n", sizeof(a + 1));//4 int
//printf("%d\n", sizeof(a[1]));//4 int
//printf("%d\n", sizeof(&a));//4 int()[4];
//printf("%d\n", sizeof(&a + 1));//4 原因同上
//printf("%d\n", sizeof(&a));//16 int [4]
//printf("%d\n", sizeof(&a[0]));//4 int*
//printf("%d\n", sizeof(&a[0] + 1));//4 int*
//##########################################################################
//char arr[] = { ‘a’,‘b’,‘c’,‘d’,‘e’,‘f’ };
//printf("%d\n", sizeof(arr));//6 字符数组的长度
//printf("%d\n", sizeof(arr + 0));//4 char*
//printf("%d\n", sizeof(arr));//1 char
//printf("%d\n", sizeof(arr[1]));//1 char
//printf("%d\n", sizeof(&arr));//4 char()[6]
//printf("%d\n", sizeof(&arr + 1));//4 原理同上
//printf("%d\n", sizeof(&arr[0] + 1));//4 char*
//***************************************
//printf("%d\n", strlen(arr));
//printf("%d\n", strlen(arr + 0));
//printf("%d\n", strlen(arr));
//printf("%d\n", strlen(arr[1]));
//printf("%d\n", strlen(&arr));
//printf("%d\n", strlen(&arr + 1));
//printf("%d\n", strlen(&arr[0] + 1));
//对字符数组千万不能使用strlen,这是一个非常愚蠢的行为
//因为strlen始终是在寻找’\0’
//而字符数组和字符串不同,它并没有’\0’这个字符
//####################################################
//char arr[] = “abcdef”;
//printf("%d\n", sizeof(arr));//7 字符数组的长度
//printf("%d\n", sizeof(arr + 0));//4 char
//printf("%d\n", sizeof(arr));//1 char
//printf("%d\n", sizeof(arr[1]));//1 char
//printf("%d\n", sizeof(&arr));//4 char()[7]
//printf("%d\n", sizeof(&arr + 1));//原理同上
//printf("%d\n", sizeof(&arr[0] + 1));//4 char*
// //#######################################################
// printf("%d\n", strlen(arr));//6 字符串长度,当然这里的长度并不包括’\0’
// printf("%d\n", strlen(arr + 0));//6 从第二个字符数到’\0’
//// printf("%d\n", strlen(arr));//愚蠢的行为… 对一个字符strlen 指针将访问未定义区域
//// printf("%d\n", strlen(arr[1]));//同上一样愚蠢
// printf("%d\n", strlen(&arr));// 6 虽然愚蠢,但运气好,正好可以求得6但他的类型其实是由char()[7]隐式转化为const char*
// //printf("%d\n", strlen(&arr + 1));//这样就不行了 对char()[7]+1 指针越过了整个字符串因此找不到相应的’\0’
// printf("%d\n", strlen(&arr[0] + 1));//5 char+1
//###################################################################
//char* p = “abcdef”;
//printf("%d\n", sizeof§);//4 只是个const char不要多想
//printf("%d\n", sizeof(p + 1));// 4 char
//printf("%d\n",sizeof(p));//1 char
//printf("%d\n", sizeof(p[0]));//1 char
//printf("%d\n", sizeof(&p));//4 char*
//printf("%d\n", sizeof(&p + 1));//4 char**
//printf("%d\n", sizeof(p[0] + 1));//4 char*
//#######################################################
//printf("%d\n", strlen§);//7 数7下到达’\0’
//printf("%d\n", strlen(p + 1));//6 同上
//printf("%d\n", strlen(p));//愚蠢行为 单个字符strlen得到野指针
//printf("%d\n", strlen(p[0]));//同上
//printf("%d\n", strlen(&p));//未定义行为
// printf("%d\n", strlen(&p + 1));//未定义行为
// printf("%d\n", strlen(p[0] + 1));//单个字符取strlen
//##################################################
//int arr[2][5] = { 1,2,3,4,5,6,7,8,9,10 };
//printf("%d\n", sizeof(arr));//40 数组的长度
//printf("%d\n", sizeof(arr[0][0]));//4 int
//printf("%d\n", sizeof(arr[0]));// 20 int[5]
//printf("%d\n", sizeof(arr[0] + 0));//4 int
//printf("%d\n", sizeof(arr[0] + 1));//4 int
//printf("%d\n", sizeof(arr + 1));//4 int()[5]
//printf("%d\n", sizeof((arr + 1)));//20 int[5]未定义行为
//printf("%d\n", sizeof(&arr[0] + 1));//4 int()[5]
//printf("%d\n", sizeof(&arr[0] + 1));//4 int
//printf("%d\n", sizeof(*arr));//20 int[5]
//printf("%d\n", sizeof(arr[3]));//20 sizeof()运算在编译器已经完成
return 0;
}