C语言从入门到入土(入门篇)(数组p1)

Posted 原来45

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言从入门到入土(入门篇)(数组p1)相关的知识,希望对你有一定的参考价值。

数组

  数组越界
  数组作为函数参数
. 数组的应用实例 1 :三子棋
  数组的应用实例 2 :扫雷游戏

1. 一维数组的创建和初始化

1.1 数组的创建

数组是一组相同类型元素的集合。
数组的创建方式:
type_t   arr_name   [ const_n ];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小
数组创建的实例:
// 代码 1
int arr1 [ 10 ];
// 代码 2
int count = 10 ;
int arr2 [ count ]; // 数组时候可以正常创建?
// 代码 3
char arr3 [ 10 ];
float arr4 [ 1 ];
double arr5 [ 20 ];

          注:数组创建,在C99标准之前, [] 中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念。

1.2 数组的初始化

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。
看代码:
int arr1 [ 10 ] = { 1 , 2 , 3 };
int arr2 [] = { 1 , 2 , 3 , 4 };
int arr3 [ 5 ] = { 1 2 3 4 5 }
char arr4 [ 3 ] = { 'a' , 98 , 'c' };
char arr5 [] = { 'a' , 'b' , 'c' };
char arr6 [] = "abcdef"

  数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初始化的内容来确定。

但是对于下面的代码要区分,内存中如何分配。
char arr1 [] = "abc" ;
char arr2 [ 3 ] = { 'a' , 'b' , 'c' };

当用双引号包括时,结尾会自动加一个\\0

1.3 一维数组的使用

对于数组的使用我们之前介绍了一个操作符: [] ,下标引用操作符。它其实就数组访问的操作符。
我们来看代码:
#include <stdio.h>
int main ()
{
        int arr [ 10 ] = { 0 }; // 数组的不完全初始化
            //计算数组的元素个数
            int sz = sizeof ( arr ) / sizeof ( arr [ 0 ]);
        //对数组内容赋值 , 数组是使用下标来访问的,下标从 0 开始。所以:
        int i = 0 ; // 做下标
        for ( i = 0 ; i < 10 ; i ++ ) // 这里写 10 ,好不好?
        {
                arr [ i ] = i ;
        }
        //输出数组的内容
        for ( i = 0 ; i < 10 ; ++ i )
        {
                printf ( "%d " , arr [ i ]);
        }
        return 0 ;
}

  

总结 :
1. 数组是使用下标来访问的,下标是从 0 开始。
2. 数组的大小可以通过计算得到。
int arr [ 10 ];
int sz = sizeof ( arr ) / sizeof ( arr [ 0 ]);

1.4 一维数组在内存中的存储

接下来我们探讨数组在内存中的存储。
看代码:
#include <stdio.h>
int main ()
{
int arr [ 10 ] = { 0 };
int i = 0 ;
    int sz = sizeof ( arr ) / sizeof ( arr [ 0 ]);
   
for ( i = 0 ; i < sz ; ++ i )
{
printf ( "&arr[%d] = %p\\n" , i , & arr [ i ]);
}
return 0 ;
}  

仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增。

由此可以得出结论: 数组在内存中是连续存放的。

补充:

再补充一点:这里我们是整型(int)指针,加1跳过4个字节,但是当不是整型指针时,如char型时

也是p+1指向后一个地址,只不过是跳过一个字节,当然后期再讲指针时会细讲哈。

2. 二维数组的创建和初始化

2.1 二维数组的创建

// 数组创建
int arr [ 3 ][ 4 ];
char arr [ 3 ][ 5 ];
double arr [ 2 ][ 4 ];

 

2.2 二维数组的初始化

// 数组初始化
int arr [ 3 ][ 4 ] = { 1 , 2 , 3 , 4 };
int arr [ 3 ][ 4 ] = {{ 1 , 2 },{ 4 , 5 }};
int arr [][ 4 ] = {{ 2 , 3 },{ 4 , 5 }}; // 二维数组如果有初始化,行可以省略,列不能省略

 

 

2.3 二维数组的使用

二维数组的使用也是通过下标的方式。 

 

2.4 二维数组在内存中的存储

像一维数组一样,这里我们尝试打印二维数组的每个元素。

 通过结果我们可以分析到,其实二维数组在内存中也是连续存储的。

 最后!今天的内容就完成了哈!!!

要是觉得对你有一点帮助的话,就来一个点赞加关注吧!!你的支持是作者的最大动力!!!

当然,订阅的话更容易了解到第一更新信息哈!

最后的最后,祝我们越来越好!!!

 

        

以上是关于C语言从入门到入土(入门篇)(数组p1)的主要内容,如果未能解决你的问题,请参考以下文章

《C语言深度剖析》第五章 内存管理 p1(完结)( C语言从入门到入土(进阶篇)

函数栈帧与可变参数列表 p1可变参数列表(完结)( C语言从入门到入土(进阶篇)

C语言从入门到入土(入门篇P3)

《C语言深度剖析》第四章 指针和数组 p2 C语言从入门到入土(进阶篇)

空瓶换水喝水问题?给一个数组,如何让奇数在前偶数在后?C语言从入门到入土(进阶篇)(算法篇p5)

C语言从入门到入土(入门特别篇)珠玑妙算益智小游戏