首页 > 其他分享 >C语言数组探秘:数据操控的艺术【下】

C语言数组探秘:数据操控的艺术【下】

时间:2024-10-01 09:48:46浏览次数:7  
标签:操控 打印 int 元素 arr C语言 二维 数组 探秘

承接上篇,我们继续讲数组的内容。


八.二维数组的使用

当我们掌握了二维数组的创建和初始化,那我们怎么使用二维数组呢?其实二维数组访问也是使用下标的形式的,二维数组是有行和列的,只要锁定了行和列就能唯一锁定数组中的一个元素。C语言规定,二维数组的行是从0开始的,列也是从0开始的,如下所示:

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

在这里插入图片描述

图中最右侧绿色的数字表示行号,第一行蓝色的数字表示列号,都是从0开始的,比如,我们说:第2行,第4列,快速就能定位出7。

我们已经了解上面内容之后,当我们想要找到数字7元素该怎么写代码来实现呢?

在这里插入图片描述

我们现在可以打印出来一个元素了,那能不能将二维数组全部元素打印出来呢?

在这里插入图片描述

我们这同样还是用循环来实现打印结果的,不过用了循环嵌套,一个用于列,一个用于行。同样我们也可以输入值之后再打印出来。

在这里插入图片描述

我们通过下标行和列找到对应的元素


九.二维数组在内存中的存储

像一维数组一样,我们如果想研究二维数组在内存中的存储方式,我们也是可以打印出数组所有元素的地址的

在这里插入图片描述

现在在我们想象中二维数组是这样子的:

在这里插入图片描述

我们可以看到打印地址一行内部两个相邻整型还是相差为4,但是当我们跨行的时候,发现第一行最后一个元素起始地址与第二行第一个元素起始地址还是相差为4,一行内部是连续的,跨行之间这两个元素也是连续的

其实事实上二维数组不是上面所画的一样,它是这样的:

在这里插入图片描述
二维数组在内存中也是连续存放的

在这里插入图片描述

二维数组是一个一维数组的数组,如果把二维数组的一行看做一个一维数组,关于二维数组就像一维数组一样,数组名加上[j]就可以访问元素了,因为是数组就要有数组名,所以上面arr[0]为第一行的数组名,arr[1]为第二行的数组名,arr[2]为第三行的数组名。


十.C99中的变长数组

在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量, 常量表达式,或者如果我们初始化数据的话,可以省略数组大小

如:
1 int arr1[10];
2 int arr2[3+5];
3 int arr3[] = {1,2,3};

这样的语法限制,让我们创建数组就不够灵活,有时候数组大了浪费空间,有时候数组又小了不够用的。

C99中给一个变长数组(variable-length array,简称 VLA)的新特性,允许我们可以使用变量指定数组大小。请看下面的代码:

1 int n = a+b;
2 int arr[n]; 

上面示例中,数组 arr就是变长数组,因为它的长度取决于变量n的值,编译器没法事先确定,只有运行时才能知道n是多少。
变长数组的根本特征,就是数组长度只有运行时才能确定,所以变长数组不能初始化。它的好处是程序员不必在开发时,随意为数组指定一个估计的长度,程序可以在运行时为数组分配精确的长度。有一个比较迷惑的点,变长数组的意思是数组的大小是可以使用变量来指定的,在程序运行的时候,根据变量的大小来指定数组的元素个数,而不是说数组的大小是可变的。数组的大小一旦确定就不能再变化了

遗憾的是在VS2022上,虽然支持大部分C99的语法,没有支持C99中的变长数组,没法测试;但是在gcc编译器上可以测试。要注意:在OJ网站上刷题的时候,基本都支持变长数组。


十一.数组练习

1.多个字符从两端移动,向中间汇聚

在这里插入图片描述

加上休眠函数

在这里插入图片描述

能不能从一行上向中间递变呢?就是把屏幕上打印的信息清理掉,再打印下一个信息。

在这里插入图片描述
system 它用于执行系统命令的,cls这个命令是清理屏幕的。其实使用数组玩的就是下标,通过下标才能找到元素,对它进行相关的处理。

标签:操控,打印,int,元素,arr,C语言,二维,数组,探秘
From: https://blog.csdn.net/2402_84021550/article/details/142305869

相关文章

  • 鹏哥C语言62---第9次作业:函数递归练习
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>//-------------------------------------------------------------------------------------------第九次作业 函数递归等//----------------------------------------------------------------......
  • 鹏哥C语言59-60---三子棋游戏
    //------------------------------------------------------5. 数组实现(游戏)-----------------------------------------//----------------------------------------------------5.1利用数组实现三子棋----------------------------------------//分块 test.c  ......
  • 实验1 C语言输入输出和简单程序编写
    一,实验目的1.会使用C语言程序开发环境(vs2010/devc++等),能熟练、正确使用它们编写、编译、运行、调试C程序2.知道C程序结构和编码规范,能正确使用3.能正确、熟练使用C语言输入输出函数:scanf(),printf(),getchar(),putchar()4.能灵活、组合使用基本数据类型、运算符和......
  • C语言:排序(1)
    目录一、排序的概念及应用排序的概念排序的运用 二、常见排序算法插入排序基本思想直接插入排序希尔排序(缩小增量排序)选择排序基本思想堆排序一、排序的概念及应用排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列......
  • C语言1—100的数字炸弹小游戏
    #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<stdlib.h>#include<time.h>void menu(){printf("1=开始游戏\n");printf("0=不进行游戏\n");printf("请选择:");}void game(){int num=rand()%100+1; int inp......
  • C语言学习记录
     9.24号b站上学习了swich条件语句和while循环语句9.25号【四舍五入】#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){floata=0;scanf("%f",&a);floatb=0;b=a;if(0<a){while(a>1......
  • 一文带你搞清C语言文件操作
    根据数据组织形式,文件分为文本文件或二进制文件在内存中以二进制的形式存储,不加转换输出到外存的文件中,就是二进制文件如果在外存上要以ASCII码形式存储,则需要在存储前转换,这种方式存储的文件就是文本文件一、流和标准流1、流流是一个抽象的概念。我们需要从外部获取数据,......
  • 实现C语言通讯录
    #实现C语言通讯录简简单单写一个C语言一:函数的定义通过MAX,NAME_MAX,SEX_MAX,ADDR_MX,TETE_MAX定义结构体成员的数量通过typedef重命名结构体为PeoInfo;在定义结构体structContact的PeoInfodata用来存放结构体里面人的信息和通过sz来访问人的信息#pragmaonce//人的信......
  • C语言文件操作(续写)
    文章目录C语言文件操作(续写)文件的随机读写fseekftellrewind文件结束判定被错误使用的feof二进制文件的例子:C语言文件操作(续写)文件的随机读写fseek根据文件指针的位置和偏移量来定位文件指针。#include<stdio.h>intmain(){FILE*pFile;pFi......
  • 鹏哥C语言54.一维数组(知识点)
    1.1一维数组的创建✌️✌️✌️ 举个例子:! 1.2数组的初始化 特别注意上面第6个,arr6[]实际上算是arr6[7]因为字符串末尾默认放了一个\0......