祗疼妳一个 发表于 2024-5-19 19:51:16

数组

一、数组概述
数组:

[*]由一组相同数据类型的数据组成的集合。
[*]数组其实就是用户向内核申请的一块空间,只不过内核提供的这块空间的内存地址是一连的
[*]目的就是方便用户存储数据和访问数据。
二、数组定义
数组的定义格式:
数据类型数组名[元素个数];
元素个数可以是常量、常量表达式、运算符+操作对象
数组所占内存巨细=数据类型*元素个数
三、数组初始化
数据类型数组名[元素个数]={元素1,元素2,元素3,.......元素n};
数组初始化的方式
1、循环遍历初始化
2、数组下标初始化
3、定义时初始化

[*]元素个数可以省略,处理器会自动计算数组所需要的内存巨细,但是一般需要在定义数组的同时举行初始化。
[*]数组在定义的时候举行初始化,声明之后不可以对数组举行初始化,要初始化数组中元素的值,只能通过数组下标的方式举行初始化
[*]假如对数组初始化时,未被赋初值的元素默以为0
[*]可以在初始化时,用下标对数组元素举行初始化赋值
四、数组元素的访问

[*]数组的下标是从0开始的,到元素个数-1竣事
[*]数组名代表数组第一个元素的地址
数组元素与指针的关系:
E1==(E1+E2)-->(E2+E1)-->E2
假如E1是数组名,E2是整型常量,则E1可以等价于 E2,这两种方式都可以访问数组中的元素。
数组名与sizeof()单独相遇时,不表现数组首元素地址,表现数组自己
数组名与&相遇时,不表现数组首元素地址,表现数组自己
地址不可以自增自减和赋值,因为地址是常量,要访问相应地址下的元素的值,可以使用指针
五、数组巨细
//数组中元素的个数
数组中元素的个数==数组容量 / 数组中元素
//数组巨细
sizeof(数组名);
sizeof(数组元素数据类型)*元素个数
六、数组清空
1、bzero()
//头文件      #include
//函数原型    void bzero(void *s,size_t n)
//功能描述    清除参数s指向的地址的地域前n个字节
//返回值      无返回值
清空整个数组:
int buf={0,1,2,3,4,5,6,7,8,9};
bzero(buf,sizeof(buf));
2、memset()
//头文件       #include
//函数原型   void *memset(void *s,int c,size_t n);
//功能描述   可以向参数s指向的地址对应的内存的前n个字节z中填充指定字节,待填充字节由用户指定
//返回值       函数返回参数s指向的内存地址
清空整个数组:
int buf={0,1,2,3,4,5,6,7,8,9};
memset(buf,0,sizeof(buf));
七、数组越界(溢出)----产生内存错误(段错误)
段错误在编译时不会报错,也不会发出告诫,只有在步伐运行阶段才会导致内存错误
八、段错误的原因
1、访问了没有权限访问的内存空间---野指针(NULL)
2、数据发生溢出,如数组越界
3、栈溢出--递归过深、局部变量占用过多空间
4、使用未初始化的指针或变量
5、在只读内存地域举行写操作
6、使用了已经释放的内存
7、多线程环境下访问共享内存时未正确同步
8、步伐运行时发生内存损坏或者内存泄漏
9、硬件故障或操作系统错误导致内存访问异常
九、字符型数组
初始化字符数组:
char buf = “abcde”;
//不可靠   在末尾加上’\0’
//“abcde”是字符串常量,已经出现数组越界的环境,发生段错误
charbuf ={‘a’,’b’,’c’,’d’,’e’,’\0’};
//对元素单独赋值是可靠的
//假如数组的容量刚好和字符串常量中的有效字符的数量同等时,就会导致数组越界,因为字符串常量的末尾有一个转义字符’\0’,也是需要占用1个字节的存储单元。
十、数组型数组(多维数组)
1、数组的定义规则:
数组名[元素数量]+ 元素类型
2、二维数组定义格式 :
元素类型 数组名称[元素数量][元素数量]
3、数组元素的访问
通过下标的方式或者地址的方式举行访问
(1)下标方式:E1
int buf;
(2)地址方式:E1--->*(E1+E2)
buf ==>* ( ( *(buf + 1) ) + 1 )
十一、柔性数组(变长数组)
用户定义一个数组,但是在定义数组的时候没有想清楚数组的元素数量,以是使用一个变量来代替数组元素个数
但是留意:当数组的内存一旦确定,则不会因为变量发生变化导致数组长度变化!
十二、匿名数组
匿名数组一般都是在函数参数中或者在多维数组中使用,很少单独使用。
如:
二维数组int buf;--->buf 数组的每个元素的类型是 int 就是匿名数组。
十三、零长数组
数组的长度可以是0,但是由于数组长度是0,以是操作系统是不会提供内存单元给数组的!但是用户可以访问
数组的长度可以是0,但是由于数组长度是0,以是操作系统是不会提供内存单元给数组的!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 数组