当前位置: 首页 > ds >正文

数组知识点(详解)

目录

数组

数组的概念

数组下标

数组的类型

求数组元素的个数

求数组的地址

一维数组

一维数组定义方式

一维数组下标

一维数组初始化

二维数组

二维数组的定义方式

二维数组的初始化

字符数组

字符数组的定义

字符数组的输入输出

 字符串其他函数


数组

数组的概念

数组:一组相同类型的元素集合。其中数组分为一维和多维,二维及二维以上都属于多维。

相同类型:指的是都是同一种数据类型

集合:可以存放一个至多个元素

数组下标

数组的下标都是由0开始的;

int a[10]表示该数组有10个元素;

因为数组的下标是由0开始的,所以这10个元素的下标表示是从a[0]~a[9],不存在a[10]

数组的类型

数组也是有类型的,他算是一种自定义类型;

数组的类型就是去掉其数组名得到其数组类型。

例:int arr[10]

arr 是他的数组名;

该数组的类型就是去掉其数组名也就是arr得到其数组类型;

int [10] 就是他的数组类型;

int 是该数组元素的类型。

注意:数组的类型和数组元素的类型是不一样的 

求数组元素的个数

计算数组的个数可以用sizeof,以%zd的格式输出

int main()
{int arr[10];printf("%zd\n", sizeof(arr));//计算总数组大小,单位是字节//int占用4个字节,arr大小是40printf("%zd\n", sizeof(arr[0]));//计算单个数组元素大小,为4printf("%zd\n", sizeof(arr) / sizeof(arr[0]));//计算数组个数,为10return 0;
}

求数组的地址

求数组的地址可以以%p来求,%p是以16进制的形式输出

int main()
{int arr[10];printf("%p\n", &arr);printf("%p\n", &arr[0]);printf("%p\n", &arr[1]);printf("%p\n", &arr[0]+1);printf("%p\n", &arr[1]+1);printf("%p\n", &arr[2]);printf("%p\n", &arr + 1);return 0;
}

从上面可以看出数组是连续存放的

以及数组名就是数组的首地址

不要忘记加上取值符&

一维数组

一维数组定义方式

类型符 数组名[常量表达式];

int a[10] 其中10代表数组的大小;

a[2+1],a[2*3],a[5/2]这些也都是符合的.

一维数组下标

数组的下标都是由0开始的;

int a[10]表示该数组有10个元素;

因为数组的下标是由0开始的,所以这10个元素的下标是从a[0]~a[9],不存在a[10].

一维数组初始化

int main()
{int a[10];//未初始化int a[10] = { 0 };//不完全初始化,10个元素的初始值全为0int a[10] = { 1,3,5,7,9 };//不完全初始化,后面5个元素的初始值为0int a[10] = { 1,2,3,4,5,6,7,8,9,10 };//完全初始化int a[] = { 1,2,3,4,5,6,7,8,9,10 };//如果所定义的数组长度与初始化的数据个数相同,则可以不写定义长度return 0;
}

二维数组

二维数组的定义方式

类型名 数组名[常量表达式(行)][常量表达式(列)]

int a[3][4],a[2-1][2*2-1],b[1][3]=a[2][3]/3这些都是可以的

二维数组的初始化

int main()
{//未初始化int a[3][4];//不完全初始化int a[3][4] = { 0 };//元素都为0 int a[3][4] = { 1,2,3,4 };//剩下的元素都为0int a[3][4] = { {1},{2,0,1} };//与下面等同//等同 { {1,0,0,0},{2,0,1,0},{0,0,0,0} };//二维数组可以省行不能省列int a[][3] = { 1,2,3,4,5,6,7 };//三行//等同 { {1,2,3},{4,5,6},{7,0,0} };int a[3][] = { 1,2,3,5,6,7 };//错误示范,不能准确的确定有几列//完全初始化int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };//完全初始化,更优化return 0;
}

字符数组

字符数组的定义

在C语言中,是将字符串作为字符数组来处理的

对字符:char c[10]={'a','b','c','d'}

对字符串:char c[10]={"abcd"},他与char c[10]={'a','b','c','d','\0'}是等价的

区别:字符串会多一个'\0'作为结束语句

字符数组的输入输出

格式声明:

%c:逐个字符的输入输出

%s:对字符串的输入输出

输入输出函数

gets:输入字符串函数,形式:gets(数组名)

puts:输出字符串函数,形式:puts(数组名)

 字符串其他函数

strlen:测字符串长度//他与sizeof的区别就是他的实际长度不包括'\0';

strcpy:将字符串复制到数组中,形式:strcpy(字符数组,字符串);

strcmp:字符串之间的比较,从左到右逐个字符比较(按ASCII码值大小比较)

形式:strcmp(字符串1,字符串2);

strlwr:将大写字符转为小写;

strupr:将小写字符转为大写;

strcat:将两个字符串连接;形式:strcat(字符数组1,字符数组2).

注意:1.使用字符串函数时开头要用#include<string.h> ;

2.在scanf函数中的输入如果是字符数组名,不要在加取值符&,因为数组名代表数组的起始位置

scanf(“%s”,&str)是错误的;

3.用%s输出的是字符串,用printf的时候输出项是数组名,而不是数组元素名.

欢迎纠错!

http://www.xdnf.cn/news/11622.html

相关文章:

  • JAF简介
  • 「DDD建模」DDD编程方法
  • 国标(GB)安全帽、安全救援头盔标准分享
  • SQL Server 入门学习总结---基础篇
  • jmeter函数---_setProperty 和 _property
  • 电竞玩家的云端盛宴!四大云电脑平台:ToDesk、顺网云、青椒云、极云普惠云实测大比拼...
  • ETCD: request timed out
  • Windows7系统smss.exe文件丢失问题
  • SDL2源代码分析
  • 【芯核架构】听你说你很了解ARM?
  • 汉字编码及区位码查询算法
  • LNK2001:unresolved external symbol,不确定的外部符号。汇总
  • 网络应用服务器配置(IIS和DNS)
  • ultral edit
  • 播放avi视频
  • WriteProcessMemory 函数 (memoryapi.h)
  • cnas实验室搬迁需要注意哪些细节和步骤
  • 计算机三级网络技术备考复习资料
  • 企业信息化建设包括哪些主要内容?帆软如何帮助企业完成数字化转型?
  • SQL Server 分布式数据库的问题和解决方法 msdtc 配置
  • 根据自己真实项目,设计的一个积分系统
  • MIMO基础总结
  • 【Python】——变量名的命名规则(2)
  • border-radius属性值参数详解
  • 烟雾视频资源搜集
  • keypress、keydown、keyup之间的区别与联系
  • 什么是博客?
  • 设计模式-设计原则-迪米特法则(最小知识原则)
  • 二值神经网络(Binary Neural Network,BNN)
  • Q44F-16C型号字母含义