网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一.前言
数组名大部分情况下是首元素的地址,只有两种情况除外:
- sizeof(数组名)此时数组名表示整个数组
- &+数组名 此时数组名表示整个数组
二.用sizeof观察一维数组的变化
代码
#include<stdio.h>
int main()
{
//数组名大部分情况下是首元素的地址,只有两种情况除外:
//1.sizeof(数组名)此时数组名表示整个数组
//2.&+数组名 此时数组名表示整个数组
//一维数组
int a[]={1,2,3,4};
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a+0));
printf("%d\n",sizeof(*a));
printf("%d\n",sizeof(a+1));
printf("%d\n",sizeof(a[1]));
printf("%d\n",sizeof(&a));
printf("%d\n",sizeof(*&a));
printf("%d\n",sizeof(&a+1));
printf("%d\n",sizeof(&a[0]));
printf("%d\n",sizeof(&a[0]+1));
}
这里主要是考察对数组、‘&’、‘*’及sizeof函数的理解
运行结果是
对运行结果的解释
- 第一个,sizeof(数组名),这里是计算数组总大小; 单位是字节,所以4*4=16
- 第二个,4/8 数组名这里表示首元素的值,a+0还是首元素地址,地址的大小就是4/8个字节,因为我的这个是64位平台所以输出8
- 第三个,4 数组名表示首元素地址,*a就是首元素,sizeof(*a)就是4
- 第四个,4/8 数组名这里表示首元素的值,a+1第2个元素的地址,地址的大小就是4/8个字节因为我的这个是64位平台所以输出8
- 第五个,第2个元素的大小
- 第六个,4/8 &a取出的是数组的地址,但是数组的地址那也是地址,地址的大小就是4/8个字节
- 第七个,16 - &a数组的地址,数组的地址解引用访问的数组,sizeof计算的就是数组的大小单位是字节
- 第八个,4/8 &a是数组的地址,&a+1虽然地址跳过整个数组,但还是地址,所以是4/8个字节
- 第九个,4/8 &a[0]是第一个元素的地址
- 第十个,4/8 &a[0]+1是第二个元素的地址
图解
三.用 sizeof观察字符数组的变化
代码
#include<stdio.h>
int main()
{
//数组名大部分情况下是首元素的地址,只有两种情况除外:
//1.sizeof(数组名)此时数组名表示整个数组


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.youkuaiyun.com/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
s/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**