欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

入门级C语言教程:理解数组

最编程 2024-02-20 14:04:00
...

Hello,我们又见面了,经过我们的不懈努力和学习,相信小伙伴的代码能力肯定提升不少,这一章我们讲数组。

  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";

我们一个一个来解释

int arr1[10] = {1,2,3}是存放了十个整型,其中前三个是放着1,2,3后面放着是0

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"存放一个字符串,但是是七个字符,还有末尾的\0

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

但是对于下面的代码要区分,内存中如何分配。

char arr1[] = "abc";
char arr2[3] = {'a','b','c'};

arr1放着是’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++)
 {
 arr[i] = i;
 } 
 //输出数组的内容
 for(i=0; i<10; ++i)
 {
 printf("%d ", arr[i]);
 }
 return 0;
}

我们可以看到数组的下标是从0开始的

数组的大小可以通过sizeof操作符计算得到。

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]);//%p打印的是指针变量的地址
 }
 return 0;
}

通过观察,发现地址是16进制,且每个前后地址相差4个字节,刚刚好是一个int ,也可以看出数组在存放过程中是连续存放的

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

  • 2.1二维数组的创建
//数组创建
int arr[3][4];
char arr[3][5];
double arr[2][4];

第一个表示行,第二个表示列,拿第一个说明int arr[3][4];代表的就是三行四列的一个int类型

不要看他好像是三行四列的,其实他还是一个连续的数组,就比如第一行的第四列和第二行的第一列还是相差四个字节

  • 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}};//二维数组如果有初始化,行可以省略,列不能省略