东莞网站营销推广公司,德州极速网站建设百家号,石家庄桥西网站制作公司,网站怎么做关键词在哪做文章目录 一、数组的概念1.1 基本理解1.2 从内存角度理解数组1.3 从编译器角度理解数组 二、数组的定义2.1 第一种#xff1a;完全初始化2.2 第二种#xff1a;不完全初始化 三、访问数组的两种方式3.1 第一种#xff1a;数组的方式依次访问3.2 第二种#xff1a;指针的方式… 文章目录 一、数组的概念1.1 基本理解1.2 从内存角度理解数组1.3 从编译器角度理解数组 二、数组的定义2.1 第一种完全初始化2.2 第二种不完全初始化 三、访问数组的两种方式3.1 第一种数组的方式依次访问3.2 第二种指针的方式访问 四、测试类型占用内存五、数组中几个关键符号总结 一、数组的概念
1.1 基本理解
数据也是一种数据类型。是由数组成的一个组数是一个特定数据类型的变量组就是将这些数放在一起。就好比之前的散落在外面的家人回家团聚在一起住在一个房子里每个元素都有单独的房间。因为是“一家人”所以所有数组元素的数据类型都是相同的。
1.2 从内存角度理解数组
(1)从内存角度讲数组变量就是一次分配多个变量而且这多个变量在内存中的存储单元是依次相连接的。 (2)分开定义多个变量譬如int a, b, c, d;和一次定义一个数组int a[4]这两种定义方法相同点是都定义了4个int型变量而且这4个变量都是独立的单个使用的不同点是单独定义时a、b、c、d在内存中的地址不一定相连但是定义成数组后数组中的4个元素地址肯定是依次相连的。 (3)数组中多个变量虽然必须单独访问但是因为他们的地址彼此相连因此很适合用指针来操作因此数组和指针天生就叫纠结在一起。
1.3 从编译器角度理解数组
(1)从编译器角度来讲数组变量也是变量和普通变量、指针变量并没有本质不同。变量的本质就是一个地址这个地址在编译器中决定具体数值具体数值和变量名绑定变量类型决定这个地址的延续长度。 (2)搞清楚变量、变量名、变量类型这三个概念的具体含义很多问题都清楚了。
二、数组的定义
数组一共有三种定义方式数组定于的过程就是初始化的过程。
2.1 第一种完全初始化
数组完全初始化的标志数组中的每个元素都是确定的。
数据类型 数组名 [数组元素个数]
例如int a[3]{1,2,3}
或是int a[]{1,2,3};//这样写[]里面的数字也就是数组长度计算机会根据后面的元素个数进行统计。注意写成int a[]是不对的因为编译器无法推算出这种数组的长度。 因此在定义数组同时初始化则可以省略数组定义时[]的长度。 C语言编译器会自动推算出其长度推论依据是初始化中元素的个数。 由此可知省略[]中数组元素个数只有一种情况那就是后面的初始化必须是完全初始化。
2.2 第二种不完全初始化
例如
int a[3]{1};//除了a[0]等于1其余部分也就是a[1]和a[2]都默认为0。
int a[3]{};//数组中的元素全部都是0
int a[3];//数组中的元素全部都是0。而int a[3]是无初始化不同数据类型数组包括 整型数组int a[3]; 浮点型数组float a[3]; 双精度浮点型数组double a[3]; 字符数组char a[3];
三、访问数组的两种方式
3.1 第一种数组的方式依次访问
数组定义的时候作为整体定义。但是使用的时候不能作为整体使用使用时必须拆开使用数组中的各个元素。 比如数组 int a [4]使用其中的4个元素分别使用a[0]、a[1]、a[2]、a[3]。注意这里跟python一样都是从0开始计算第一位的。其中[]是数组的标志[]中的数字叫做数组下标下标是我们访问数组中各个元素的指引。下标是0代表数据中的第一个元素下标最后的一个是n-1访问时注意下标。 来个编程练习
//打印字符数组
int a[3] {a,b,r};for (int i 0; i 3; i){printf(a[%d]%c\n,i,a[i]);}int a[3] {1,3,5};for (int i 0; i 3; i){printf(a[%d]%d\n,i,a[i]);}return 0;这里注意字符输出是的格式化是用%c。如果使用%d打印输出的是ASCII码数字。C语言中的字符型需要使用单引号。 3.2 第二种指针的方式访问
以如下为例
四、测试类型占用内存
int a sizeof(int);
printf(a%d,a);五、数组中几个关键符号
以a、a[0]、a、a[0]为例进行分析与理解前提是 int a[10] (1)这4个符号搞清楚了数组相关的很多问题都有答案了。理解这些符号的时候要和左值、右值结合起来也就是搞清楚每个符号分别做左值和右值时的不同含义。 (2)a表示数组名。a做左值时表示整个数组的所有空间10×440字节又因为C语言规定数组操作时要独立单个操作不能整体操作数组所以a不能做左值a做右值表示数组首元素数组的第0个元素也就是a[0]的首地址首地址就是起始地址就是4个字节中最开始第一个字节的地址。一般讲元素地址就是指首地址。a做右值等同于a[0];本质是指针。 (3)a[0]表示数组的首元素也就是数组的第0个元素。做左值时表示数组第0个元素对应的内存空间连续4字节做右值时表示数组第0个元素的值也就是数组第0个元素对应的内存空间中存储的那个数 (4)a表示数组名a取地址字面意思来看就应该是数组的地址因此是指针类型。a不能做左值a实质是一个常量不是变量因此不能赋值所以自然不能做左值。a做右值时表示整个数组的地址。 (5)a[0]字面意思就是数组第0个元素的首地址搞清楚[]和的优先级[]的优先级要高于所以a先和[]结合再取地址。做左值时表示数组首元素对应的内存空间做右值时表示数组首元素的值也就是数组首元素对应的内存空间中存储的那个数值。即做右值时a[0]等同于a。 打印输出以检测对上述符号的理解是否正确 解析 第一个打印由于输出的格式是整型a作为右值表示首元素首地址因此打印出的是地址而非字符。 第二个打印由于输出的格式是字符型a[0]表示首元素因此打印出的是字符而非地址。 第三个打印由于输出的格式是字符串型a作为右值表示整个数组因此打印输出的是字符串而非地址。
referencehttps://blog.csdn.net/Raven_csdn/article/details/87874679 其他需要注意的方法[]可以贴着数组名也可以不贴着这都没关系。 总结
1、a和a做右值时的区别a是整个数组的首地址而a是数组首元素的首地址。这两个在数字上是相等的但是意义不相同。意义不相同会导致他们在参与运算的时候有不同的表现。 2、a和a[0]做右值时意义和数值完全相同完全可以互相替代。但是sizeof(a)求的是整个数组的空间大小。sizeofa[0]此时a[0]指的是一个指针。 3、a是常量不能做左值。a指的也是一个指针。 4、a做左值代表整个数组所有空间然而C语言规定数组操作时要独立单个操作不能整体操作数组所以a不能做左值。 数组类似于python中的集合。不同在于数据中的元素数据类型想要而集合中的元素可以多样。 其次两种的标志相同都是[]。 C语言程序中变量的实质就是内存中的一个格子当我们定义创建一个变量了一个变量后相当于在内存中得到一个格子这个格子的名字就是变量名以后访问这个内存格子就是使用该变量名就行了。这就是变量的本质。 数组的两种访问方式1.下标式访问 2.指针式访问 数组下标只是表象实际上编译器是将数组下标转换为指针式进行访问的。