首页 > 其他分享 >【C语言】初识C语言 - 数组

【C语言】初识C语言 - 数组

时间:2024-06-19 23:32:31浏览次数:22  
标签:初始化 arr 下标 int 元素 C语言 初识 数组

一、一维数组的创建和初始化


1.1一维数组的创建

数组的定义:是一种线性数据结构,用于存储相同数据类型的元素的集合。数组中的元素在内存中是连续存储的,并且通过索引来访问。

#include<stdio.h>

int main()
{
	int arr[1] = { 2 };
	//数组数据类型为:int
	//数组名为:arr
	//数组存放元素为:1个
	//存放的元素整型:2,这里的2是直接初始化了
    //不初始化也可以这样写:int  arr[1];
	return 0;
}

注意:在“ [] ”中是常量或者常量的表达式,const修饰的变量不可以使用,因为被const修饰的变量它的本质还是一个变量,下面举例:

下面是数组创建的一些实例:

int main()
{
	//下面是整型数组
	int arr1[3] = { 1,2,3 };//在创建的同时给初始化了
	int arr2[3] = { };//创建了但没有初始化,系统默认初始化全为0
	int arr3[] = { 1,2,3, };//创建了但没有给元素个数,但初始化了
	//以上的表达方式都可以

	//下面是字符数组
	char arr4[5] = { 'a','b','c','d','e' };//创建了一个字符数组,元素个数为5,初始化存入a b c d e
	char arr5[]= { 'a','b','c','d','e' };//创建了一个字符数组,初始化存入a b c d e,元素个数没写系统默认为0
	//这里要强调一点关于字符类型中的“0”对应的ASCII码就是“\0”
	char arr6[5] = {};//创建,没有初始化
	char arr7[] = "abcde";//这是存入字符串,其实就是{ 'a','b','c','d','e' };
	char arr8[2] = { 'a',98 };//这里面的98,其实对应ASCII码的就是字符“b”

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

1.2一维数组的使用

在使用数组时我们需要了解下面两个:

1.数组下标:数组中的元素是连续的,通过下标来找到对应的元素,每一个元素都有自己对应的下标。

2.[]:这个是下标引用操作符,例如arr[2],这个就表示的是在arr数组中下标为2的元素。

下面画图来理解数组下标:

一个整型数组元素有10个,1,2,3,4,5,6,7,8,9,10。对应的下标为0,1,2,3,4,5,6,7,8,9。数组元素下标是从0开始的。

int main()
{
	int arr[10] = { 0 };//数组的不完全初始化

	//计算数组的元素个数
	int sz = sizeof(arr) / sizeof(arr[0]);
	//sizeof(arr)是计算整个数组大小的
	//sizeof(arr[0])这里表示计算数组中下标为0元素的大小,就是一个元素的大小
	//用整体的大小除一个元素的大小得到的是数组有多少个元素

	//对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:
	int i = 0;//做下标
	for (i = 0; i < 10; i++)
	{
		arr[i] = i;
	}
	//输出数组的内容
	for (i = 0; i < 10; ++i)
	{
		printf("%d ", arr[i]);//0,1,2,3,4,5,6,7,8,9
	}
	return 0;
}


1.3一维数组在数据中的存储

我们通过打印数组中每个元素的地址,通过地址来判断数组实在数据中怎么存储的

#include <stdio.h>

int main()
{
	//创建一个数组
	int arr[10] = { 0 };
	
	//计算数组中有多少元素
	int sz = sizeof(arr) / sizeof(arr[0]);

	//开始循环打印数组中每个元素的地址
	int i = 0;
	for (i = 0; i < sz; ++i)
	{
		printf("&arr[%d] = %p\n", i, &arr[i]);
	}
	return 0;
}

        我使用的是32位,这里需要用十六进制来计算,我们可以发现,每个元素对应的地址,相邻的差4,因为定义的是整型数组,所以每个元素的大小就是4个字节。我们得到了数组在内存中的存储时连续的。


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


2.1二维数组的创建

int arr[3][4]
//3表示行,4表示列

 2.2二维数组的初始化

int main()
{
	//3表示的是3行,4表示的是4列,这么计算的话我们这个二维数组应该有12个元素
	int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };

	//这种表述和上面一样
	int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };

	//如果只想让每一行的前两个数字初始化可以这样写
	int arr[3][4] = { {1,2,},{5,6,},{9,10,} };
	//这样写和int arr[3][4] = { {1,2,0,0},{5,6,0,0},{9,10,0,0} };是一样的,没有初始化的元素默认为0

	int arr[3][4] = { 1,2,3,4,5 };//未完全初始化,剩余的元素系统默认为0

	//在二维数组中行可以省略,但列不行
	int arr[][4] = { 1,2,2,3,5 };//这样的写法可以
	int arr[3][] = { 1,2,2,3,5 };//这样的写法不行
	//如果你不告诉编译器有几列的话,在一行中可以无限放元素,这样是不允许的

	return 0;
}

注意:二维数组在初始化的时候,列可省略,但行不行。


 2.3二维数组的使用

int main()
{
	//定义一个未完全初始化的二维数组,然后在数组里面放元素
	int arr[3][4] = { 0 };

	//定义变量i,使用i来代表行
	int i = 0;
	for (i = 0; i < 3; i++)//进入for循环依次循环第一行,第二行,第三行
	{
		int j = 0;//定义j来表示列
		for (j = 0; j < 4; j++)//依次进入数组的第i行的第j个元素进行赋值
		{
			arr[i][j] = i * 4 + j;
		}
	}
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			printf("%d ", arr[i][j]);
		}
	}
	return 0;
}

运行结果如下: 

注意:不论是一维数组还是二维数组,数组下标都是从0开始。在二维数组中第一行第一列的元素下标就是arr[0][0]。


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

我们还是通过打印地址来判断二维数组在内存中是怎样存储的。

我们可以看到其实二维数组在内存中存储也是连续的。

总结:我们可以理解二维数组就是一个一个一维数组拼接起来的一个一维数组。

标签:初始化,arr,下标,int,元素,C语言,初识,数组
From: https://blog.csdn.net/2301_79755897/article/details/139813993

相关文章

  • C语言期末复习笔记
    目录一,基础介绍。二,标识符起名规范。三,数据类型。四,变量。五,运算符和表达式1,加减乘除​编辑  /为整除,%为余数,*为乘号2,关系运算符3,逻辑运算符4,运算符优先级5,前自增,后自增6,三目运算符。7,符合运算符。六,控制语句。1,if判断2,多重判断。3,for循环4,while循环5,d......
  • C语言程序设计-11 结构体与共用体
    11.1定义一个结构的一般形式11.2结构类型变量的说明1.先定义结构,再说明结构变量。2.在定义结构类型的同时说明结构变量。3.直接说明结构变量。11.3结构变量成员的表示方法11.4结构变量的赋值结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来完成。......
  • C语言程序设计-10 指针
    指针是C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。学习指针是学习C语言中最重要的一环,能......
  • C语言程序设计-8 函 数
    8.1概述在前面已经介绍过,C源程序是由函数组成的。虽然在前面各章的程序中大都只有一个主函数main(),但实用程序往往由多个函数组成。函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能。C语言中的函数相当于其它高级语言的子程序。C语言不仅提供了极为丰富的库函......
  • 初识java基础
    一、初识javaJava是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程......
  • 初识Python————Python“三剑客“(适用初学者,了解概述,有官网)
        Python三剑客指的是Pandas、Numpy和Matplotilb这三个库,它们在数据分析领域扮演着核心角色。它们各自拥有独特的功能和优势,结合使用可以极大地提高数据分析的效率和准确性。一、NumpyNumPy是使用Python进行科学计算的基础包。它包含如下的内容:一个强大的N维数组......
  • linux下C语言如何操作文件(四)
    structstring_segment*parse_path(constchar*file_path)函数,解析路径,将一个linux的路径分成两部分路径和文件名。返回一个字符串分段接头体指针,里边有三个字符串。第0个是原始的file_path,第二个是已经拆分好的路径,第三个是文件名部分。代码如下:/***解析linux下的路径......
  • 【Java核心技术10】Java数组详解
    引言在Java编程中,数组是一种非常重要的数据结构,它允许我们存储同一类型的多个元素,并通过索引快速访问这些元素。本文将详细讲解Java数组的基本概念、创建、初始化、访问和修改,以及多维数组和数组的常见操作。无论你是Java的初学者,还是希望巩固基础的资深开发者,本文都将为......
  • 2024-06-19:用go语言,给定一个起始下标为 0 的整数数组 nums 和一个整数 k, 可以执行一个
    2024-06-19:用go语言,给定一个起始下标为0的整数数组nums和一个整数k,可以执行一个操作将相邻两个元素按位AND后替换为结果。要求在最多执行k次操作的情况下,计算数组中所有元素按位OR后的最小值。输入:nums=[3,5,3,2,7],k=2。输出:3。解释:执行以下操作:1.将nums[0]......
  • 掌握Numpy数组对象ndarray
    Python提供了一个array模块。array和list不同,array直接保存数值,和C语言的一维数组比较类似。但是由于Python的array模块不支持多维,也没有各种运算函数,因此不适合做数值运算。NumPy弥补了Python不支持多维等不足之处,它提供了一种存储单一数据类型的多维数组--ndarray。本次将实......