一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN C/C++领域新星创作者blog.csdn.net/chuxinchang…
- 掘金LV3用户 juejin.cn/user/138142…
- 阿里云社区专家博主,星级博主,技术博主 developer.aliyun.com/profile/exp…
- 华为云云享专家 bbs.huaweicloud.com/community/m…
基础知识
sizeof():计算的是变量/类型所占内存空间的大小
数组名:
1.sizeof(数组名)--此时数组名表示的是整个数组,计算的是整个数组的大小,单位是字节
2.&数组名-数组名表示的是整个数组,取出的是整个数组的地址
&数组名+1:跳过整个数组
除次之外,所以的数组名都是数组首元素地址!
注意:地址的大小可能为4,可能为8,分32位平台和64位平台
strlen:库函数,求字符串长度。 遇到\0停止计算
sizeof():操作符-单位是字节,求变量所占空间大小
求类型创建的变量所占空间的大小,字符串中的\0也占用空间,也算
strlen()是根据传过来的地址向后求长度,由于不对字符串做修改,所以参数可以用const修饰
题目: 每一行代码分析:
int main()
{
int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));//数组名a单独放在sizeof内部,数组名表示整个数组,计算的是整个数组的大小
printf("%d\n", sizeof(a + 0));//a表示首元素的地址,a+0还是首元素的地址,地址的大小是4/8字节
printf("%d\n", sizeof(*a)); //a表示首元素的地址,*a 就是首元素 ==> a[0] ,大小就是4
//*a <==> *(a+0) <==> a[0]
printf("%d\n", sizeof(a + 1));//a表示首元素的地址,a+1是第二个元素的地址,大小就是4/8
printf("%d\n", sizeof(a[1])); //a[1] 就是第二个元素 - 4
printf("%d\n", sizeof(&a)); //&a - 数组的地址 - 4/8 - int(*)[4]
printf("%d\n", sizeof(*&a)); //*&a - &a是数组的地址,对数组的地址解引用拿到的是数组,所以大小时候16
//相当于printf("%d\n", sizeof(a));//16
printf("%d\n", sizeof(&a + 1));//4/8 &a是数组的地址,&a+1 是数组的地址+1,跳过整个数组,虽然跳过了数组,
//还是地址 4/8
printf("%d\n", sizeof(&a[0]));//4/8
printf("%d\n", sizeof(&a[0] + 1));//第二个元素的地址 4/8
return 0;
}