C语言之数组的定义及其使用方法

2023-05-16

作者:从未止步…

博客主页:从未止步的博客

专栏:和我一起学C

语录:Every day is a second chance.

行动是理想最高贵的表达 ,给大家介绍一款超牛的斩获大厂offer利器——牛客网

快来和我一起刷题吧!!!
在这里插入图片描述

数组是一组相同类型元素的集合,数组的创建方式: 数组类型 数组名 数组长度的大小(常量表达式)

例如:int arr[10]; √

int count=10;

int arr2[count];×(必须是常量表达式)

Char arr3[10];√

Float arr4[11];√

Double arr5[20];√

数组元素的初始化

int arr[10]={1,2,3};这种叫做不完全初始化,剩下没有给定初始值的元素默认初始值为0.,字符数组同理也是如此。

不过字符串数组比较特殊,在部分初始化之后,没有初始化的部分第一个存放的是/0,而不是0.

例如:char arr[]=”abncsan”; char arr2[10];如果没有对数组的元素进行初始化,那么必须指定他的长度,反之,初始化之后可以不写长度。

char arr[]=“abcdefg”;1:无论求字符串长度还是字节的大小都直接引用数组名。

​ printf(“%d”,sizeof(arr));计算字节的过程中字符串的结束标志/0的字节大小也会被计算进去。

​ printf(“%d”,strlen(arr));而在计算字符串长度的过程中,/0的长度并不会被计算进去。

关于sizeof和strlen的差别:

1:两者之间没有什么关联

2:strlen是求字符串长度的,只能针对字符串长度,并且它是一个库函数,在使用的过程中需要引进头文件(string.h)

3:sizeof计算变量,数组,类型的大小,单位是字节,他是一个操作符。


char arr[]="abc";char arr2[]={'a','b','c'};printf("%d\n",sizeof(arr));4printf("%d\n",sizeof(arr2));3printf("%d\n",strlen(arr));3printf("%d\n",strlen(arr2))

Sizeof只计算所包含元素的个数,而strlen是计算字符串的长度,只有遇到/0才会停止统计,而arr2中无法判断何时才能遇见/0。

一维数组的使用:

通过下标来访问数组元素。

char arr[]="abc";int i;for(i=0;i<=2;i++)/for(i=0;i<=strlen(arr);i++){printf("%c",arr[i]);}

通过循环的方式输出数组元素,对于字符数组来说,我们不仅可以根据strlen来表示,还可以通过sz=sizeof(arr1)/sizeof(arr1[0]);来表示数组的长度,但如果是字符串数组就不建议这样使用,因为会将字符串末尾的/0也计算进去。

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

printf(“&arr1[%d]=%p\n”,i,&arr1[i]);
%p是用来打印地址的。
在这里插入图片描述

通过运行结果我们可以得出,数组在内存中是连续存放的,且地址在依次增大,每个元素之间的距离相同,且都为4,正好是一个元素的大小。

二维数组的创建与初始化:

例如:1:int arr[3][4]={1,2,3,4,5};该二维数组在内存中,从第一行开始,当第一行占满之后,5就被放在第二行,而5后面因为没有进行初始化,所以它的默认值就是0.

2:int arr[3][4]={{1,2,3},{4,5}};如果是这种方式创建的,我们就强制性的把元素1,2,3放在了第一行,4,5,放在了第二行,而第一二行没有初始化的将用0进行填补。

无论是以上述的两种方法中哪一种进行初始化,列的长度不能省略,而行的长度可以省略。

二维数组的访问:

(依然是通过下标完成)

在这里插入图片描述

二维数组元素的打印方式和一维数组相类似。

printf(“&arr[%d][%d]=%p\n”,i,j,&arr[i][j]);

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

通过二维数组元素在内存中的地址,发现二维数组的元素在内存中也是进行连续存储的,它并不是通过矩阵的方式,而是和一维数组的存储方式一样,呈线性排列,且各个元素位置之间相差均是4。

在这里插入图片描述

设有一个二维数组:int arr[3][4],它可被视为4个一维数组,其原因是:假设我们现在需要访问第一行的元素,那么arr[0][j]的行已经是一个定值,只需要改变j的大小,arr[0]就相当于一维数组中数组名,其他行亦是如此。

*数组作为函数参数:*

1:数组元素作函数实参

数组元素就是下标变量,它与普通变量并无区别。 因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。

\#include <stdio.h>

  void nzp(int v) 

  {if (v > 0)printf("%d ", v);elseprintf("%d ", 0);

  }

  int main(void)

  {int a[5], i;printf("input 5 numbers\n");for (i = 0; i < 5; i++){scanf_s("%d\n", &a[i]);nzp(a[i]);}return 0;

}

将数组名作为函数参数:

\#include <stdio.h>

void nzp(int a[5])

{

  int i;

  printf("\nvalues of array a are:\n");

  for (i = 0; i < 5; i++) 

  {if (a[i] < 0){

​      a[i] = 0;printf("%d ", a[i]);}

  }

}

int main(void)

{

  int b[5], i;

  printf("\ninput 5 numbers:\n");

  for (i = 0; i < 5; i++)

  {scanf_s("%d", &b[i]);

  }

  printf("initial values of array b are:\n");

  for (i = 0; i < 5; i++)

  {printf("%d ", b[i]);

  }   

  nzp(b);

  printf("\nlast values of array b are:\n");

  for (i = 0; i < 5; i++)

  {printf("%d ", b[i]);

  }

  return 0;

}

用数组名作为函数参数时还应注意以下几点:
①形参数组和实参数组的类型必须一致,否则将引起错误。
②形参数组和实参数组的长度可以不相同,因为在调用时,只传送首地址而不检查形参数组的长度。当形参数组的长度与实参数组不一致时,虽不至于出现语法错误(编译能通过),但程序执行结果将与实际不符,这是应予以注意的。

一般情况下,数组名表示数组的首地址,但有两个情况除外:1:sizeof()后面直接加数组名时,他表示整个数组的大小2:&数组名,数组名代表整个数组,此时取出的是整个数组的地址。,虽然数组首地址和数组的地址在值上面是相同的,但是他们代表的意义不相同。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言之数组的定义及其使用方法 的相关文章

  • TCP发送数据、接受数据及TCP通信程序练习

    目录 一 TCP发送数据 二 TCP接收数据 三 TCP通信程序练习 一 TCP发送数据 Java中的TCP通信 xff1a Java对于基于TCP协议的网络提供了良好的封装 xff0c 使用Socket对象来代表两端的通信端口 xff0c
  • slam学习笔记

    ubuntu20 04 使用vs code编写 现放cmake文件 xff08 记得链接库文件和配置C 43 43 版本 xff09 cmake minimum required VERSION 2 8 project learingMat
  • SLAM学习笔记

    编译环境ubuntu20 04 vs code xff08 李群 李代数 xff09 先是CMakeLists txt cmake minimum required VERSION 3 0 project learning sophus s
  • SLAM学习笔记

    编译环境ubuntu20 04 xff0c vs code 先cmake文件 cmake minimum required VERSION 2 8 project image set CMAKE BUILD TYPE 34 Release
  • SLAM学习笔记

    编译环境ubuntu20 04 vscode ceres库2 0 0 g2o库同gaoxiang12 slambook2中的版本号一致 cmake文件 cmake minimum required VERSION 2 8 project c
  • 数据结构之C语言单链表操作

    实验目的 xff1a 1 xff0e 创建一个带头结点的单链表 2 xff0e 插入元素操作 xff1a 将新元素x插入到单链表head的头部 将新元素x插入到单链表head的尾部 将新元素x插入到单链表head中第i个元素之后 3 xff
  • DBUS入门与C编程

    https blog csdn net weixin 45566765 article details 125028296 一 D Bus简介 1 D Bus是什么 D Bus最主要的用途是在 Linux 桌面环境为进程提供通信 xff0c
  • 模拟IIC——关于模拟IIC的IO口的配置选取推挽输出还是开漏输出,以及是否需要更改IO口输入输出模式和是否需要对IO配置上拉

    在使用模拟IIC的时候 xff0c 观看别人的程序的时候发现了程序之间的一些不一样的地方 代码1 IO方向设置 define SDA IN GPIOB gt MODER amp 61 3 lt lt 9 2 GPIOB gt MODER 6
  • C语言——链表

    C语言 链表 链表是一种基础的数据结构类型 xff0c 一种能够动态维护数据的线性数据表 链表的数据以结点形式存储信息 xff0c 并通过结点之间的指针实现结点之间的衔接 为什么要用链表 xff1f 链表和数组类似 xff0c 但是功能比数
  • 学习记录 | ZigBee协议栈工作流程

    第一次来CSDN记录一下学习过程 xff0c 其实就是笔记啦 之前用Typora 的 但前几天电脑出问题重装系统后打开笔记文件发现照片都打不开了 xff0c 索性想换一种记笔记方式 好啦 以下是正文 xff01 xff01 xff01 对了
  • 学习记录 | ZigBee协议栈实践——串口收发数据

    上次的理论知识学的有点杂乱 今天来跟着例程实践看一看 目录 一 ZigBee协议栈的安装 编译和下载 二 协议栈工作流程 三 串口通信主要代码 1 串口打印 2 串口打印收到的数据 四 实现 五 总结 一 ZigBee协议栈的安装 编译和下
  • 第一次画异形板后的总结感悟

    目录 画原理图前的准备 画PCB的一些好方法 蜂鸣器电路 供电电路 其他电路 杂七杂八的随记要点 总结 像这样的异形板是通过solidworks扫描实物生成的 画原理图前的准备 当然是选购元器件 一般习惯在嘉立创进行选购 选择符合要求 有库
  • 自学物联网ESP第一天

    先简单的使用串口通信AT指令 刚开始不知道用什么开发好 在博客找了很久本来打算用 eclipse 不过突然发现可以用Arduino 不过下载真的好慢 于是开始看一下函数准备一下 一 基本函数 1 setup 函数 Arduino控制器通电或
  • stm32串口发送+接收

    本文章转自B站江科大自化协 一发送 接线图 目标结构 Serial c include 34 stm32f10x h 34 include lt stdio h gt 1移植printf函数 封装sprintf include lt std
  • vscode配置C/C++环境(超详细保姆级教学)

    大一上学期被学长安利了vscode xff0c 但是下载安装后不会配置 xff0c 自己连查带问搞了七八个小时终于配置好了 后面身边很多同学也不会配 xff0c 都来找我帮忙配 xff0c 加上之前自己摸索着配的时候感觉网上没有详细又靠谱的
  • 路由器接口解析

    ensp 接口解析 路由器的CON和AUX con是串口 xff0c 接口电脑串口可以进路由器的命令行查看和设置 一般为设备的控制端口 xff0c Console端口使用配置专用连线直接连接至计算机的串口 xff0c 利用终端仿真程序进行路
  • 解决VSCode写html文件时<!+Enter导入模板快捷键没办法使用的问题

    好久没有写前端了 xff0c 先是用模板快捷键 lt 43 Enter导入模板 xff0c 发现没有办法使用 找到网上一些资料 xff0c VSCode使用 html 5 取代了之前的生成模板快捷键 示例 xff1a 在空白html文本里逐
  • LVGL 之 windows 上 lvgl 模拟器 基于 Visual Studio 搭建方法的简单整理

    mark GUI Guider与lvgl联合仿真 xff08 结合stm32实验进行演示 xff0c 含触摸屏实验计数器与计算器 xff09 https blog csdn net gudao07 article details 12752
  • 初认识stm32 ————每日小总结(串口通信初始化基础操作)

    留下代码 xff0c 日后复习 c文件 include 34 my uart h 34 void my uart init NVIC PriorityGroupConfig NVIC PriorityGroup 2 设置中断优先级分组 RC

随机推荐

  • Sqoop全量导入mysql表数据到HDFS

    我是在三个节点运行的 xff0c 主节点只有namenode和mysql数据库 1 开启服务 具有NameNode和DataNode start all sh 2 进入sqoop的目录下并且输入代码 下面的命令用于从 MySQL 数据库服务
  • 在字符串中查找子字符串

    查找子串 include lt stdio h gt char Search char str1 char str2 char s1 61 str1 char s2 61 str2 char cur 61 str1 while cur s1
  • 基于相机云台周期运动的“远帧差”图像处理算法

    传统的帧差法针对前后两帧或者某几帧进行图像处理 xff0c 一旦相机视角转动 xff0c 就不能获得很好的检测效果 xff0c 我所参与的项目就是一个云台搭载一台红外相机进行取像 xff0c 这样可以大幅度的节约成本 xff0c 但是对图像
  • 深究C语言4.链表和结构体

    目录 一 xff0c 结构体 一 xff0c 结构体的定义 二 xff0c 结构体的概念 1 2 3 4 5 6 三 xff0c 结构变量的使用 1 结构变量的操作符 gt 和 2 结构变量的赋值 3 结构变量作为函数参数 4 结构指针 5
  • 使用c++解析http\https数据遇到的问题(附代码)

    开发环境 xff1a vs2019 系统 xff1a win10 openssl版本 xff1a Win32OpenSSL 3 0 7 访问网页 xff1a www baidu com 先说明以下问题 xff1a c 43 43 在发送ht
  • vector的使用

    vector的介绍 1 vector是表示可变大小数组的序列容器 2 vector就像数组一样 xff0c 也采用的连续空间来存储元素 xff0c 这也意味着可以采用下标对vector的元素进行访问 3 vector与普通数组不同的是 xf
  • Linux系统( Centos 7) 配置与管理Apache服务器实例详细步骤

    Linux系统 xff08 Centos 7 xff09 配置与管理Apache服务器实例详细步骤 服务器centos7 1 1 配置网络 root 64 centos7 vim etc sysconfig network scripts
  • 什么是Cmake和Makefile?

    目录 1 前言 2 什么是Makefile 3 什么是Cmake 4 Cmake的语法规则 1 前言 在学习视觉SLAM十四讲的时候 xff0c 对这个Cmake的概念不太清楚 xff08 笔者是机械方向转到SLAM这个方向的 xff09
  • 创建任务7.24

    创建任务 1 什么是任务 在裸机系统中 xff0c 系统的主体就是 main 函数里面顺序执行的无限循环 xff0c 这个无限循环里面 CPU 按照顺序完成各种事情 在多任务系统中 xff0c 我们根据功能的不同 xff0c 把整个系统分割
  • Linux驱动开发系列:DRM(第十部分)

    https www iotword com 7227 html 一 DRM简介 DRM xff0c 全称Direct Rending Manger 是目前Linux主流的图形显示框架 相比较传统的Framebuffer xff0c DRM更
  • 解决Ubuntu与Virtualbox虚拟机共享文件夹无权限的问题(保姆级)

    目录 使用这个命令后 xff0c 如果不能马上打开共享文件夹 xff0c 需要重启一下ubuntu系统 这样 xff0c 你共享的work文件夹就能在Ubuntu系统访问了 声明 CSDN 64 m0 637799558昵称更改为 64 孤
  • char类型与int类型的转换

    在c语言中 xff0c char类型与int类型可以转换 xff0c 如何转换我在此做一个粗略的总结 首先是char转换为int include lt stdio h gt int main char a a 61 110 int c 61
  • C语言中字符串大小与长度的区分

    字符串大小和字符串长度不同 xff1a 字符串大小指该字符串占用多少空间 字符串长度指该字符串的字符个数
  • 【字符串函数】strcat的使用及原理

    1 strcat函数的函数声明 char strcat char Destination const char Source 2 strcat函数的头文件 include lt string h gt 3 strcat函数的使用 strca
  • 【DRM】DRM Display Driver Guide

    https zhuanlan zhihu com p 534267979 目录 收起
  • TCP协议

    1 TCP协议的可靠传输 我们知道TCP协议的特点有 有连接 可靠传输 面向字节流 全双工 其中连接 面向字节流和全双工在 网络编程 该文章中详细说明了 而要深入了解TCP协议 了解可靠传输也是重中之重 可靠传输也是TCP协议的一大特点 那
  • c/c++程序运行不出结果?

    1 xff0c 条件语句未执行 在运行过程中 xff0c 用到if或while等条件语句 xff0c 条件之后的语句没有执行就结束了 xff0c 且输出变量也未初始化 xff0c 当然就输出不了任何东西了 xff1b 2 xff0c 变量未
  • 【解救ROS】关于ros机器人(小车)动态调试PID参数

    1 打开终端 xff0c 连接树莓派 ssh clbrobot 64 clbrobt 2 打开底盘节点 roslaunch clbrobot bringup launch 3 再打开一个终端 ssh clbrobot 64 clbrobt
  • 十进制转十六进制(C语言)

    首先要注意输入非负整数的范围 xff1a 这里用long表示 xff1b long 取值 2147483648 2147483647 include lt stdio h gt int main long n int i 61 0 j ch
  • C语言之数组的定义及其使用方法

    作者 xff1a 从未止步 博客主页 xff1a 从未止步的博客 专栏 xff1a 和我一起学C 语录 xff1a Every day is a second chance 行动是理想最高贵的表达 xff0c 给大家介绍一款超牛的斩获大厂o