前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C语言数组

C语言数组

作者头像
风中的云彩
发布于 2024-11-07 13:43:57
发布于 2024-11-07 13:43:57
16400
代码可运行
举报
文章被收录于专栏:C/C++的自学之路C/C++的自学之路
运行总次数:0
代码可运行

等待太久得来的东西,多半已经不是当初自己想要的样子了。

数组的理解

1. 数组是⼀组相同类型元素的集合。 2. 数组中存放的是一个或者多个数据,但是数组元素个数不能为0。 3. 数组中存放的多个数据,它们的类型是相同的。

一维数组 

一维数组的创建并初始化 

1. 创建一维数组的同时,最好给数组初始化,否则数组内将存放任意值。 2. 数组初始化分为两种:完全初始化和不完全初始化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type arr_name[常量值]; 

//type 指定的是数组中存放数据的类型
//arr_name 指的是数组名的名字
//[] 中的常量值是⽤来指定数组的⼤⼩的

//完全初始化
int arr[5] = {1,2,3,4,5};

//不完全初始化
int arr2[6] = {1};//1,0,0,0,0,0

 字符数组初始化

1. 字符数组是一种特殊的一维数组。 2. 只存在字符数组,而没有字符串数组。 3. 字符数组的初始化有三种情况,其中前两种都默认在字符串后面有 '\0' 元素。 4. 第一、二种情况下,是不能改变数组中的元素的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[] = "hello world";//第一种
	char arr2[] = { "hello world" };//第二种
	char arr3[] = { 'h','e','l','l','o','\0'};//第三种
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);
	return 0;
}
//三种字符数组初始化等价

 一维数组的类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int arr1[10];
int arr2[12];
char ch[5];

//arr1数组的类型是 int [10]
//arr2数组的类型是 int [12]
//ch 数组的类型是 char [5]

一维数组的元素个数 

1. 数组在内存中是连续存放的。 2. 我们一般用 sizeof() 操作符,分别计算出数组的长度和一个数组元素的长度,两者相除就是数组中元素的个数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int arr[10] = { 0 };
	printf("%d\n", sizeof(arr));//计算整个数组的字节大小
	printf("%d\n", sizeof(arr[1]));//计算数组中的一个成员的字节大小
    int sz=sizeof(arr)/sizeof(arr[1]);//计算数组中成员的个数
	return 0;
}

 二维数组

 二维数组的创建并初始化

1. 和一维数组类似,创建二维数组的同时,最好给数组初始化,否则数组内将存放任意值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type arr_name[常量值1][常量值2]//type 指定的是数组中存放数据的类型
//arr_name 指的是数组名的名字
//[][] 中的常量值是⽤来指定数组的⼤⼩

//完全初始化
int arr[2][2] = { 0,1,2,3 };

//不完全初始化
int arr[2][2] = { 0 };

 双层循环控制二维数组

1. 在对二维数组中某个元素选中的时候,需要分步进行理解。  2. 例如 arr[i][j] ,相当于先运算 arr[i] ,选中第(i+1)行,再运算 arr[i][j] ,选中第(i+1)行的第(j+1)列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
 int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
 int i = 0;
 //输⼊
 for(i=0; i<3; i++) //产⽣⾏号
 {
     int j = 0;
     for(j=0; j<5; j++) //产⽣列号
     {
         scanf("%d", &arr[i][j]); //数组名就是数组第一个元素的地址,scanf()可以不用&符号。
     }
 }
 //输出
 for(i=0; i<3; i++) //产⽣⾏号
 {
     int j = 0;
     for(j=0; j<5; j++) //产⽣列号
     {
         printf("%d ", arr[i][j]); //输出数据
     }
     printf("\n");
 }
 return 0;
}

数组与指针 

数组名的本质

1. 数组名实际上是数组首元素的地址。  2. 但是有两点例外:

  1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
  2.  &(数组名),这里的数组名也表示整个数组,取出整个数组的地址。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
 
	int arr1[] = { 1,2,3,4,5 };
	printf("%p\n", &arr1[0]);
	printf("%p\n", arr1);
}
//都是传入数组首元素地址
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例子1:
int main()
{
	int arr1[] = { 1,2 };
	printf("%p\n", &arr1[0] + 1);//跳过了一个字节(1个元素)
	printf("%p\n", arr1 + 1);//跳过了一个字节(1个元素)
	printf("%p\n", &arr1 + 1);//跳过了两个字节(整个数组)
}
 
例子2:
#include <stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("&arr[0] = %p\n", &arr[0]);
	printf("&arr[0]+1 = %p\n", &arr[0] + 1);//跳过了四个字节(1个元素)
	printf("arr = %p\n", arr);
	printf("arr+1 = %p\n", arr + 1);//跳过了四个字节(1个元素)
	printf("&arr = %p\n", &arr);
	printf("&arr+1 = %p\n", &arr + 1);//跳过了四十个字节(10个元素)
	return 0;
}

一维数组传参的本质  

1. 数组传参,本质上是传址调用,传递的是数组首元素的地址。 2. 形式参数可以写成数组形式,也可以写成指针形式。  3. 指针可以理解为一个动态数组,通过动态内存管理来扩容,这时候就可以把指针名称看成数组名称,把指针名当数组名一样使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void test(int arr[10])//参数写成数组形式,本质上还是指针
void test(int* pa)//参数写成指针形式

//使用指针访问数组 
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int arr[9] = { 0 };
	int * pa = arr;
	int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	for (int i = 0; i < sz; i++)
	{
		scanf("%d", pa+i);//不需要括号,这里是指针与整数的运算
	}
	for (int i = 0; i < sz; i++)
	{
		printf("%d\n", *(pa+i));//不需要括号,这里是指针与整数的运算
	}
	return 0;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef int STDataType;
typedef struct Stack
{
	STDataType* arr;//可以理解为一个指针,也可以理解为一个动态数组。
	int capacity;//栈的空间大小
	int top;//栈顶
}Stack;
//arr直接当数组名用
ps->arr[ps->top] = 1;

指针数组 

1. 整型数组,是存放整型的数组;字符数组,是存放字符的数组;指针数组,就是一种存放指针的数组 。 2. 可以利用数组指针实现二维数组的功能。 3. 例如 arr[i][j] ,相当于先运算 arr[i] ,选中第(i+1)行,再运算 arr[i][j] ,选中第(i+1)行的第(j+1)列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int arr1[] = { 1,2,3,4,5 };
	int arr2[] = { 2,3,4,5,6 };
	int arr3[] = { 3,4,5,6,7 };
	int* arr[3] = { arr1,arr2,arr3 };//存放指针(地址)的数组
	for (int i = 0; i < 3; i++)
	{
	
		for (int j = 0; j < 5; j++)
		{
			printf("%d", arr[i][j]);//注意arr[i][j]是从前往后运算的,先算arr[i],再算arri[j].
		}
		printf("\n");
	}
	return 0;
}

致谢

感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何深入掌握C语言数组(详解)
1、数组必须 先定义,后使用 2、只能逐个引用数组元素,不能一次引用整个数组 3、数组元素表示形式:  数组名[下标]  , 下标可以是常量或整型表达式
用户9645905
2022/11/30
1K0
如何深入掌握C语言数组(详解)
C语言学习系列-->【数组】
• type 指定的是数组中存放数据的类型,可以是: char、short、int、float 等,也可以⾃定义的类型 • arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就⾏。 • [ ] 中的常量值是⽤来指定数组的⼤⼩的,这个数组的⼤⼩是根据实际的需求指定就⾏。
南桥
2024/01/26
1890
C语言学习系列-->【数组】
c语言—数组详解(建议收藏)
注:数组创建, [] 中要给一个常量才可以,不能使用变量。可以直接用常量,或者使用宏定义。
全栈程序员站长
2022/09/16
4970
c语言—数组详解(建议收藏)
c语言数组介绍
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。 看代码:
全栈程序员站长
2022/09/08
2.3K0
c语言数组介绍
一篇文章带你完全理解C语言数组
注意:数组创建,在c99标准之前,数组初始化[]中要给一个常量才可以,不能使用变量。在c99标准支持了变长数组的概念。 但是vs2022不支持c99变长数组、变长数组是不能初始化的。
Yui_
2024/10/16
790
一篇文章带你完全理解C语言数组
c语言从入门到实战——数组
C语言数组是一种用来存储相同类型元素的数据结构,它由一组连续内存空间组成,并且每个元素的大小相同。这些数据按照一个固定的顺序排列。数组可以有一个或多个维度,每个维度的大小必须是正整数。
鲜于言悠
2024/03/20
4790
c语言从入门到实战——数组
抽丝剥茧C语言(中阶)数组
本章会详细的讲解数组,以前因为数组的困惑会迎刃而解。 数组的作用是储存大量元素,不用不停的创建变量。
有礼貌的灰绅士
2023/03/28
5950
抽丝剥茧C语言(中阶)数组
【C语言篇】从零带你全面了解数组(超详细)
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。
半截诗
2024/10/09
3230
【C语言篇】从零带你全面了解数组(超详细)
C语言——D/数组
数组是⼀组相同类型元素的集合; • 数组中存放的是1个或者多个数据,但是数组元素个数不能为0; • 数组中存放的多个数据,类型是相同的。 数组分为⼀维数组和多维数组,多维数组⼀般⽐较多见的是⼆维数组。
用户11015888
2024/03/11
1660
C语言——D/数组
C语言中数组的总结
数组的创建:在创建数组时,我们必须定义数组的类型和大小,数组的大小不能为0,数组中的元素类型都是相同的。 eg:
全栈程序员站长
2022/08/14
2K0
C语言中数组的总结
C语言——数组
什么是数组呢?从名字上来看,数组、数组是不是就是数据的组合呢?让我们来看看数组的概念,数组是⼀组相同类型元素的集合,我们需要注意的是数组中存放的是1个或者多个数据,但是数组元素个数不能为0。同时 数组中存放的多个数据,是相同类型的。
用户11352420
2024/11/07
1900
C语言——数组
C语言数组基础知识详解---一维数组,二维数组,数组访问,二分查找
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。 type 指定的是数组中存放数据的类型,可以是:char、short、int、float 等,也可以是自定义的类型。 arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就行。 []中的常量值是用来指定数组的大小的,这个数组的大小是根据实际的需求指定就行。
fhvyxyci
2024/09/24
3030
C语言数组基础知识详解---一维数组,二维数组,数组访问,二分查找
【C语言进阶】指针数组 —— 数组指针
🎬 鸽芷咕:个人主页 🔥 个人专栏:《C语言进阶篇》《C语言初阶篇》
鸽芷咕
2023/12/25
1930
【C语言进阶】指针数组 —— 数组指针
一维数组与二维数组———详细解读及一些注意事项
这里注意一点,在C99标准里有变长数组的概念,所谓变长数组并不是指数组会变长,而是指用整型变量或表达式声明或定义的数组。如下所示:
诺诺的包包
2023/02/17
5890
一维数组与二维数组———详细解读及一些注意事项
C语言------数组
type指定的是数组中存放数据的类型,可以是char、short、int 、float
凯子坚持C
2024/09/23
1810
详解C语言中的数组
在正式讲解C语言数组之前,我们可以先了解一下,为什么出现数组这种自定义的数据类型? 其实想解决这个问题,非常的简单! 请看下面的例子:
埋头编程
2024/10/16
1830
详解C语言中的数组
[C语言]数组和字符串
在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来——称为数组。数组就是内存中连续的相同类型的变量空间,同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的。
IT编程爱好者
2023/04/12
1.5K0
[C语言]数组和字符串
C语言从青铜到王者——数组详解【一维数组、二维数组、字符数组】
所谓数组,是指将那些具有相同类型的、数量有限的若干个变量通过有序的方法组织起来的一种便于使用的形式。数组属于一种构造类型,其中的变量被称为数组的元素。数组元素的类型可以是基本数据类型,也可以是特殊类型和构造类型。
C语言中文社区
2021/05/13
1.6K0
C语言——指针(2)
前面我们已经了解了指针的基本概念以及简单的使用,那么什么问题一定要使用指针解决呢?
用户11352420
2024/11/07
1170
C语言——指针(2)
数组(1)
对于数组的使用我们之前介绍了一个操作符: [] (下标引用操作符),它其实就是数组访问的操作符。
waves浪游
2024/01/22
1560
数组(1)
相关推荐
如何深入掌握C语言数组(详解)
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验