S4——数组 上

简介: S4——数组

1.  一维数组的创建

1.1  数组的创建

数组是一组相同数据类型元素的集合。

数组的创建方式

type_t    arr_name[const_n];

//type_t:是指数组的元素类型(可以是基本数据类型的任意一种)

//arr_name:数组名(与变量相同,遵循标识符的命名规则)

//const_n:常量表达式(用来表示数组中元素个数,即数组的大小(长度))

注:常量表达式是用[]方括号括起来的,不是()圆括号。

数组创建的实例


代码1:

int  arr1[10];//定义一个有10个整形的一维数组
char  arr2[5];
float  arr3[6];
...


代码2:

int  n=10;
int  arr[n];//这样可以吗?

注:变长数组(不定长的数组)

数组创建,在C99标准之前,[]中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。

理解:

①能否用变长数组:先看环境支不支持C99的新特性

   如:VS   IDE   不支持C99中的变长数组

          Linux  gcc   支持C99中的变长数组

②注意:变长数组不能初始化

1.2  数组的初始化

数组的初始化是指,在创建数组的同时给数组的内容一些(合理)初始值。

即:创建的同时给数组一些值,这就叫初始化(类似变量)

一维数组初始化的一般形式如下

1、完全初始化:(元素个数=数组长度)

①指定数组长度:

int   arr1[6]={0,1,2,3,4,5};//元素个数=数组长度

②不指定数组长度:(没有指定数组长度,编译会根据初始化的内容来确定数组长度)

int   arr2[]={0,1,2,3,4};//数组长度=5

2、不完全初始化:(数组长度!=元素个数)

如:

   ①int型:剩余没赋初值的元素默认初始化为0

   ②char型:剩余的元素默认初始化为‘\0’

注:数组元素之间用,逗号隔开。

注意区分以下代码:

代码1:

#include<stdio.h>
int main()
{
  char arr1[] = { 'a','b','c'};
  char arr2[] = "abc";
  printf("%s\n", arr1);
  printf("%s\n", arr2);
  return 0;
}

运行结果:

%s——打印字符串,直到遇到‘\0’才停止。

每一个字符串末尾隐藏放了个'\0'。


代码2:


#include<stdio.h>
int main()
{
  char arr1[4] = { 'a','b','c' };
  char arr2[] = { 'a','b','c' };
  printf("%s\n", arr1);
  printf("%s\n", arr1);
  return 0;
}

运行结果:

注:char未初始化的元素默认'\0'

1.3  一维数组的使用

知识点:


1、数组是使用下标来访问的,下标是从0开始的(下标标明了元素在数组中的位置)

2、[]在这是下标访问操作符(所以里面可以是变量)

3、数组的大小可以通过计算得到


如:

       int arr[10];

       sz=sizeof(arr)/sizeof(arr[0]);


代码实例如下:

#include<stdio.h>
int main()
{
  int arr[] = { 0,1,2,3,4,5 };
  int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
  //1、顺序打印
  int i = 0;//下标
  for (i = 0; i < sz; i++)
  {
    printf("%d ", arr[i]);
  }
  printf("\n");
  //逆序打印
  for (i = sz - 1; i >= 0; i--)
  {
    printf("%d ", arr[i]);
  }
  printf("\n");
  return 0;
}

运行结果:


说明:

数组的使用与变量相似,但也有区别!

1、数组必须先定义,后使用。

2、数组元素只能逐个引用,而不能一次引用整个数组(字符串除外)。

3、 当逐个使用数组中的每一个元素时,通常借助for循环语句。

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

探讨数组在内存中的存储:我们打印每个元素的地址看看

#include<stdio.h>
int main()
{
  int arr[6] = { 0,1,2,3,4,5 };
  //打印每一个元素的地址
  int i = 0;
  for (i = 0; i < 6; i++)
  {
    printf("%p\n", &arr[i]);//%p-专门用来打印地址的
  }
  return 0;
}

运行结果:

由于数组在内存连续存放,所以我们知道数组的一个地址就可以顺藤摸瓜找到其他元素。

代码如下:

#include<stdio.h>
int main()
{
  int arr[6] = { 0,1,2,3,4,5 };
  int * p = &arr[0];
  int i = 0;
  for(i=0;i<6;i++)
  {
    printf("%d ", *(p+i));
  }
  return 0;
}

运行结果:


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

2.1  二维数组的创建

//二维数组创建

int  arr[3][4];//定义一个3行4列的整形数组

char  arr1[2][3];

说明:

①二维数组可以看成一个矩阵(先行后列)

②元素个数=行数*列数

③存储一个二维数组所需的内存字节数:

                                总字节数=sizeof(类型)*行数*列数



2.2  二维数组的初始化

1、按数组的排列顺序对各数组元素赋初值:

   int  arr1[2][3]={1,2,3,4,5,6};

2、分行给二维数组赋初值(一个花括号{}表示一行)

     int  arr2[2][3]={{1,2},{4}};

3、注意:二维数组如果初始化,行是可以省略的,但列不能省略!

      int  arr3[][2]={1,2,3,4,5,6};//元素个数=行数*列数—》行数=3


相关文章
|
22天前
|
存储 C++ 索引
C++数组
C++数组
|
1月前
1-9 数组
1-9 数组
9 0
|
3月前
|
程序员 索引
C 中数组详解
C 中数组详解。
14 3
|
3月前
|
存储 C语言
数组
数组。
13 0
|
7月前
|
存储 C语言 索引
C 数组
C 数组。
22 0
|
3月前
|
机器学习/深度学习 人工智能 JavaScript
数组练习
数组练习。
16 0
|
3月前
|
存储 程序员 C++
|
4月前
|
存储 人工智能 算法
4.为何数组下表从0开始
4.为何数组下表从0开始
37 1
|
9月前
|
存储 机器学习/深度学习 Java
原来这就是数组
原来这就是数组
52 0
|
存储 算法 编译器