【c语言】 -- 详解数组篇

news2025/1/4 20:15:11

📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。

c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。

本章来学习数据的存储。

让我们开启c语言学习之旅吧

目录

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

1.1数组的创建

1.2数组的初始化

1.3一维数组的使用

1.4一维数组在内存中的存储

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

2.1二维数组的创建

2.2二维数组的初始化

2.3二维数组的使用

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

三.数组越界

3.1数组名是什么

结语:


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

  本章将会为大家介绍为了提高处理效率而把具有相同类型的数据有序地组织起来的一种形式——数组

1.1数组的创建

数组是一组相同类型元素的集合。
数组的创建方式:

type_t  arr_name  [const_n];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小

数组的创建实例

int arr1[10];
char arr3[10];
float arr4[1];
double arr5[20];

那这个代码对不对呢?

int count = 10;
int arr2[count];

 注:数组创建,在C99标准之前, [] 中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。

在vs上不支持变长数组哦,可以去gcc上。

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

如果要省略数组的大小,数组必须初始化,数组的大小是根据初始化的内容来确定的

字符数组和其他的数组有点不太一样

比如说这个代码

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

看看他在内存中是如何分配的吧

 arr1包含/0,arr2不包含/0

1.3一维数组的使用

如果说我们创建了这么一个数组,我们该怎么使用呢?

#include <stdio.h>
int main()
{
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	return 0;
}

 有一个操作符:[ ],  下标引用操作符,用来访问数组的操作符。

对于数组而言他的每个元素都有一个下标,比如说。

c语言规定下标是从0开始的,然后每次递增1往后走。

 通过下标就可以很好的找到元素

通过下标找到下标为5的元素。

1.4一维数组在内存中的存储

接下来我们就来探究一下数组在内存在是怎样存储的,把每个元素的地址打印出来

注:sizeof(arr)/ sizeof(arr[0])是用来求元素个数的。 

通过观察我们发现随着元素的增长,地址也在有规律的递增。

由此得出结论:数组在内存中是连续存放的。

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

二维数组有行和列,看图

这是一个4行5列的数组

2.1二维数组的创建

数组的创建

int arr[3][4];
char arr[3][5];
double arr[2][4];

 注:int  arr[行] [列]

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

注意二维数组如果有初始化,行可以省略,列不能省略 

2.3二维数组的使用

二维数组的访问依然是通过下标

 只要通过下标定位到对应的元素就可以访问了。

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

像一维数组一样,这里我们尝试打印二维数组的每个元素的地址 

结论:说明二维数组在内存中也是连续存放的 

三.数组越界

数组的下标是有范围限制的。数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的。
所以程序员写代码时,最好自己做越界的检查。

什么意思呢?看代码

#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
  int i = 0;
  for(i=0; i<=10; i++)
 {
    printf("%d\n", arr[i]);
 }
return 0;
}

注:当i等于10的时候,就越界访问了 

这个时候编译器会报一个警告

3.1数组名是什么

 结论:数组名是数组首元素的地址。(有两个例外)

如果数组名是首元素地址,那么:

int arr[10] = {0};
printf("%d\n", sizeof(arr))

为什么输出的结果是:40?

1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数
组。
2. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组。

除此1,2两种情况之外,所有的数组名都表示数组首元素的地址。

结语:

最近要期末考试了正好复习一下,下期更新操作符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/656213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XSS测试-业务安全测试实操(11)

XSS测试 测试原理和方法 跨站脚本漏洞是Web应用程序在将数据输出到网页的时候存在问题,导致恶意攻击者可以往Web页面里插入恶意JavaScript、HTML代码,并将构造的恶意数据显示在页面的漏洞中。攻击者一般利用此漏洞窃取或操纵客户会话和 Cookie,用于模仿合法用户,从而使攻击…

CVE-2010-2883-PDF漏洞提权复现过程

第二步&#xff0c;打开Kali Linux渗透机使用命令msfconsole进入Metasploit渗透测试平台&#xff0c;使用模块adobe_cooltype_sing生成木马文件。 输入search adobe_cooltype_sing命令搜索Adobe渗透模块 与漏洞相关的模块有两个&#xff0c;编号为0的模块是使用本地的服务器挂…

项目实战:防刷

你好&#xff0c;我是田哥 最近在搞充电桩项目&#xff0c;用户使用短信验证码形式进行注册和登录&#xff0c;那么问题来了&#xff1f; 分布式微服务项目实战&#xff1a;充电桩项目 实战分布式事务【SeataSpring Cloud】 项目实战&#xff1a;自定义异常和统一参数验证&…

lazarus开发:快速读写excel文件的神奇控件——FPSpreadsheet

目录 1 简介 2 用wps制作一个简单的工资表 3 编译一下自带的演示程序 1 简介 FPSpreadsheet是一个功能强大的控件库&#xff0c;用于读取和写入电子表格文件。使用该控件库开发的软件&#xff0c;能够在不安装电子表格应用程序的情况下&#xff0c;快速读出、写入电子表格文…

详解Hystrix

目录 1.微服务中的容错 1.1.服务雪崩 1.2.解决办法 2.hystrix 2.1.概述 2.2.项目结构及依赖 2.3.代码示例 2.3.1.注册中心 2.3.2.服务调用者 2.3.3.服务提供者 2.4.服务降级 2.4.1.单点响应 2.4.2.默认响应 2.4.3.前置响应 2.5.服务熔断 2.5.1.概述 2.5.2.使用…

【C语言复习】第一篇、关于我的C语言的复习路线

目录 第一部分、前言 第二部分、学习视频 第三部分、我的建议 第一部分、前言 首先想谈一下为啥都读研究生的我还在学习C语言&#x1f602;&#xff0c;说起来我认为挺搞笑的&#xff0c;一句话解释就是&#xff1a;本科上课的时候&#xff0c;耳朵打苍蝇去&#xff0c;哈哈。…

面向快速反应的工程团队--QRF团队模型

很多团队都纠结于产品业务需求和各种不断插入的中断请求而无法自拔&#xff0c;这篇文章介绍了QRF团队模型&#xff0c;将产品业务开发和紧急响应团队区分开&#xff0c;为重要而紧急的事情提供单独的处理通道&#xff0c;从而帮助团队能够聚焦在重要的事情上。原文&#xff1a…

Nucleo-F411RE (STM32F411)LL库体验 7 - 低功耗(睡眠、待机)

Nucleo-F411RE &#xff08;STM32F411&#xff09;LL库体验 7 - 低功耗&#xff08;睡眠&#xff09; 1、简述 F411有三种模式 Sleep mode、stop mode 、standby mode。 其中SleepMode 、Stop Mode 可选择WFI 以及WFE&#xff0c;两者的区别在于&#xff0c;前者任何中断都能…

编译原理笔记(哈工大编译原理)

文章目录 前言概论语言与文法基本概念字母表串字母表与串的联系 文法语言推导和规约句型与句子语言与字母表 文法的分类 前言 说实话&#xff0c;我不是很想上这门课&#xff0c;确实没什么大用&#xff0c;虽然我觉得这门课学一学也挺好&#xff0c;但是我觉得弄8个大实验就真…

socket地址的通配符地址、环回地址

今天在写ServerSocket的时候&#xff0c;遇到了socket地址的通配符地址、环回地址。 package com.thb;import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket;public class ServerSocketMain {public static void main(String[] args) {try…

UI Tool Kit 使用

Unity 2021 已经把UIBuilder 内置了&#xff0c;项目组也打算 后续工具采用 toolkit来写&#xff0c;这边也是找了一下教程熟悉了一下。 UI 工具包 - Unity 手册 首先 先创建一个EditorWindow 会生成相应的C#&#xff0c;UXML,USS代码 默认会把显示的MenuItem代码生成&#xf…

记录--设计一个可选择不连续的时间范围的日期选择器

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 npm包&#xff1a;sta-datepicker效果图 需求 普通的时间选择器要么只能单选&#xff0c;要么只能选范围&#xff0c;不可以随意选择若干个时间&#xff0c;同时大多数现成的时间选择器选择结束会收起…

EasyExcel实战与笔记

概述 Excel导入导出是业务开发中非常常见的需求。本文记录一下如何快速入门使用EasyExcel&#xff0c;深度实战&#xff0c;以及遇到的问题。 入门 使用EasyExcel导入如下依赖即可&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactI…

java-代码生成器——有了代码生成器两个小时的工作量2分钟完成了

代码生成器 &#x1f942;代码生成器&#x1f33b;1. 第一步引用相关依赖&#x1f357;2. 第二步编写代码 CodeGet.java&#x1f969;3. 第三步运行查看结果&#x1f356;4. 第四步总结一下 &#x1f942;代码生成器 只需要创建好表的结构&#xff0c;代码生成器通过简单的配置…

Linux知识点 -- 进程控制(二)

Linux知识点 – 进程控制&#xff08;二&#xff09; 文章目录 Linux知识点 -- 进程控制&#xff08;二&#xff09;一、进程程序替换1.概念2.替换原理3.进程替换的操作4.使用exec函数执行自己写的程序5.使用exec函数执行其他语言的程序 二、编写一个简易的shell 一、进程程序替…

LeetCode 892. Surface Area of 3D Shapes【数组,数学】简单

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

KCC@北京启动,为一个城市做好开源!

KCC&#xff08;开源社城市社区&#xff09;北京区在6月12日正式成立&#xff0c;吸引了众多开源爱好者和技术开发者参与。现场举行的活动围绕 “为一个城市做好开源” 的话题展开讨论&#xff0c;包括开发者关系、开源背后的无用之用、开源在中国的变化、开源的困难与挑战以及…

OpenAI ChatGPT 使用示例

1.编程应用 1.1. 生成例子代码 ChatGPT帮助我们生产我们需要的例子代码。而且准确率很高。即使你不懂某一种语言也没关系&#xff0c;一定程度上较低了程序员的的门槛。 我有三组数据&#xff0c;第一组是星期一到星期五&#xff0c;第二组是这一天的具体时间&#xff0c;第三…

etcd 备份操作---马哥教育

etcd安装&#xff1a; mkdir -pv etcd-download-test tar -zxvf etcd-v3.4.4-linux-amd64.tar.gz -C etcd-download-test/ 编辑修改系统环境变量 /etc/profile export ETCD_HOME/tmp/etcd-download-test/etcd-v3.4.4-linux-amd64 export PATH$PATH:$JAVA_HOME/bin:$ETCD_HOM…