C语言 第5节 数组

作者: 小超_8b2f | 来源:发表于2019-07-06 23:12 被阅读0次
  1. 为什么需要数组
    为了解决大量同类型数据的存储和使用的问题
    (定义n多个不同的变量名,累死;)
    为了模拟现实世界
数组的分类:
  1. 一维数组(线)
  • 为元素分配连续的内存空间
  • 所有的数据类型必须相同
  • 所有变量所占的字节大小必须相等
  • 有关一维数组的操作
    (1)初始化:
    • 完全初始化:int a[5] = {1, 2, 3, 4, 5};5
    • 部分初始化:int a[5] = {1,2,3}; 未初始化的部分自动为零
    • 不初始化:int a[5]; 所有元素都是垃圾值
    • 清零:int a[5] = 0;
    • 错误写法:
      int a[5];
      a[5] = {1,2,3,4,5};

错误,5是下标。只有在定义数组的时候才能整体赋值,其他情况下的整体赋值都是错误的。
正确写法:
for(int i = 0; i < 5; i++)
b[i] = a[i];

如何将数组a的值全部赋值给数组b?

错误写法:
b = a;
a和b代表数组名,代表数组第一个元素地址:即a[0]地址和 b[0]地址

#include <stdio.h>

int main(void) {
    
    int a[5];
    scanf("%d", &a[0]);
    printf("a[0] = %d\n", a[0]);

    scanf("%d", &a[3]);
    printf("a[3] = %d\n", a[3]);
    for(int i =0; i < 5; i++)
        printf("%d ", a[i]);
    return 0;
}
------------------结果-------------------------
123
a[0] = 123
456
a[3] = 456
123 -858993460 -858993460 456 -858993460
------------------------------------------------

反转数组中的数据:

#include <stdio.h>

int main(void) {
    int a[7] = {1,2,3,4,5,6,7};
    int i = 0;
    int j = 6;
    int t;
    while(i < j) {
        t = a[i];
        a[i] = a[j];
        a[j] = t;
        i++;
        j--;
    }
    for( i =0; i < 7; i++)
        printf("%d ", a[i]);
    return 0;
}

赋值、排序、求最大值、最小值、求个数

  • 二维数组:平面
    int a[3][4];
    总共是3行4列12个元素,
    a[0][0] ~ a[2][3]
    a[i][j] ,该二维数组的下标只能为:a[i-1][j-1]

初始化:

  1. int a[3][4] = {1,2,3,4,5,6,7,9,10,11,12};
  2. int a[3][4] = {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}
    };
for(int i = 0; i < 3, i++)
  for(int j = 0; j < 4; j++)
      printf("%-5d ", a[i][j]);  //负号表示左对齐,5表示5个光标位置
printf("\n");

对二维数组的排序
求每一行最大值
判断矩阵是否对称
矩阵的相乘

  • 三维数组:空间几何
  • 四维数组:时间,时空穿越
  • 多维数组
    是否存在多维数组?
    不存在
    因为内存是线性一维的。
    n维数组可以当做是每个元素是n-1维数组的一维数组。
    比如:
    int[3][4]
    该数组是含有3个元素的一维数组
    只不过每个元素又是一个含有4个元素的一维数组
    int[3][4][5]
    该数组是含有3个元素的一维数组
    只不过每个元素都是4行5列的二维数组

....

#include <stdio.h>

int main(void){

    int a[5] = {1,2,3,4,5};
    for(int i = 0; i < 5; i++)
        printf("%d\n",a[i]);

    printf("%d\n", a[100]); //有值有结果,但是是脏数据,非数组的数据
}

数组不是重点,因为数组太原始太底层了,排序啊,插入啊,啥的都需要自己编写。现在的编程语言都已经提供了这样的工具类。以数组为底层,你操作起来很简单实用,不麻烦。所以数组一般很少用。

数组的限制

1.数组的长度不能通过变量的形式指定

int a[5]; //OK
int lent = 5; int a[len]; /error
  1. 传统形式定义的数组,该数组内程序员无法手动释放
    在一个函数运行期间,系统为该函数中的数组分配的空间会一直存在,直到该函数运行完毕时,数组的空间才会被系统释放
  2. 数组的长度一旦定义,其长度不能更改。
    数组的长度不能再函数运行过程中动态地扩充或缩小
  3. 传统方式定义的数组不能跨函数使用
    A函数定义的数组,在A函数运行期间可以被其他函数调用,但A函数运行完毕之后,A函数的中的数组将无法被其他函数调用
#include <stdio.h>
  
int main(void) {
  int arr[] = {3, 5, 8,2,54, 9,7};
  int *p = arr;
  int len = sizeof(arr) / sizeof(int);

  for(int i = 0; i < len; i++){
   //printf("%d " , *(arr+i));
   //printf("%d ", arr[i]);
   //printf("%d ", *(p+i));
   //printf("%d ", p[i]);
   //printf("%d ", *p++);
   printf("%d ", *(p++));
   //printf("%d ", arr++);//arr是常量,++会改变其值,❌
  }
  printf("\n");
}

相关文章

  • C语言数组的升维与降维之说

    C语言数组的升维与降维之说 C语言数组的升维 C语言数组的降维

  • 指针数组和数组指针

    指针数组|存储指针的数组 在C语言和C++语言中,数组元素全为指针的数组称为指针数组。 例如:int *p[10]...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

  • 0基础学习C语言第七章:数组(2)

    C语言 多维数组 C 语言支持多维数组。多维数组声明的一般形式如下: type name[size1][size2...

  • iOS开发 -- C语言基础6(数组)

    iOS开发 -- C语言基础6(数组) C语言数组 一、数组的概念 用来存储一组数据的构造数据类型 特点:只能存放...

  • 2020-11-17--02--windows 数据类型

    windows系统是c语言开发的 字符数组,是c语言,重新定义的 Lstrlen-------C语言函数=====...

  • 数据结构--单向链表

    C语言中,我们在使用数组时,会需要对数组进行插入和删除的操作,这时就需要移动大量的数组元素,但在C语言中,数组属于...

  • C语言数组

    #include int main (void){ int a [20];//称a为20个元素的数组,每个...

  • C语言----数组

    C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为...

  • C语言数组

    说真的感受到c语言真的很灵活,语法没有那么死板 1.int array[] = { 1, 2, 3, 4 };可以...

网友评论

    本文标题:C语言 第5节 数组

    本文链接:https://www.haomeiwen.com/subject/sooncctx.html