1.sizeof定义
sizeof运算符,以字节为单位给出数据大小
strlen()函数,以字符为单位给出字符串长度
sizeof(int)求类型大小,必须带括号
sizeof(b=a+2)其中表达式不计算
sizeof(a)求变量大小
2.sizeof与数组
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a));//16 一个整形四个字节,四个元素
printf("%d\n", sizeof(a + 0));//4 表示指针
printf("%d\n", sizeof(*a));//4 a首元素地址,*a解引用首元素大小
printf("%d\n", sizeof(a + 1));//4 a首元素地址加1还是地址
printf("%d\n", sizeof(a[1]));//4数组第二个元素
printf("%d\n", sizeof(&a));//4 整个数组地址 vc中是16 错误
printf("%d\n", sizeof(&a + 1));//4 指向下一个数组的地址
printf("%d\n", sizeof(&a[0]));//4首元素地址
printf("%d\n", sizeof(&a[0] + 1));//4第二个元素2的地址
printf("%d\n", sizeof(*&a));//16 &a整个数组地址 解引用为整个数组大小
char name[] = "abcdef";
printf("%d\n", sizeof(name[0]));//1首元素大小
printf("%d\n", sizeof(&name));//4取地址数组名是地址
printf("%d\n", sizeof(*name));//1 name数组首元素地址,解引用数组第一个元素大小
printf("%d\n", sizeof(&name+1));//4指向下一个数组的地址
printf("%d\n", sizeof(name+1));//4 b的地址
printf("%d\n", sizeof(name));//7 数组总大小
printf("%d\n", strlen(name));//6 字符串长度
printf("%d\n", strlen(&name));//6 取地址数组名和数组名是同一值字符串长度
printf("%d\n", strlen(&name + 1));//X随机值 下一个数组的长度
printf("%d\n", strlen(name + 1));//5 第二个元素以后的字符串长度
3.sizeof和指针
char *name = "abcdef";
printf("%d\n", sizeof(name[0]));//1首元素大小 相当于 *(name+0)
printf("%d\n", sizeof(&name));//4 指针变量地址是地址
printf("%d\n", sizeof(*name));//1 首元素大小
printf("%d\n", sizeof(&name+1));//4 指针变量地址 加一跳过指向下一个地址
printf("%d\n", sizeof(name+1));//4 b的地址
printf("%d\n", sizeof(name));//7 name是指针变量
printf("%d\n", strlen(name));//6 字符串长度
printf("%d\n", strlen(&name));//随机值 name变量地址
printf("%d\n", strlen(&name + 1));//随机值 name变量地址 加一跳过指向下一个name变量地址
printf("%d\n", strlen(name + 1));//5 第二个元素以后的字符串长度