C语言——数组知识大汇总

本文详细介绍了C语言中的数组知识,包括数组的定义、声明与初始化、下标引用、多维数组、数组与指针的区别、数组名的特性、以及数组作为函数参数的情况。还探讨了数组的搜索和排序算法,如线性搜索和选择排序。
摘要由CSDN通过智能技术生成

1、 定义

数组: 相同类型数据项的集合。

下标变量: 后面跟一个方括号内的下标的变量,指示一个数组元素。

数组下标: 在数组名后的方括号内的数值或表达式,用于指示访问哪个数组元素。


数组是由 ”类型名“ ”标识符“ ”维数“ 组成的复合型数据类型。

”维数“ 表示数组中包含的元素个数,必须大于等于 1 的常量表达式。此表达式只能包含 ”整型字面常量“ ”枚举常量“ ”用常量表达式初始化的整型const对象“。


2、 声明、初始化

语法: 元素类型aname[size];    未初始化

元素类型aname[size] = { 初始化列表 };    初始化


a、静态和自动初始化

存储于静态内存的数组只初始化一次,因此当程序执行时,静态数组已经初始化完毕。

对于自动变量的初始化过程就没有那么浪漫啦,因为自动变量位于运行时堆栈中,执行流每次进入它们所在的代码块时,这类变量每次所处的内存位置可能并不相同。在程序开始之前,编译器没有办法对这些位置进行初始化。如果定义的数组比较大,那么每次初始化的时间是非常可观的。 所以就需要综合考虑是不是要声明为 static 。


b、不完整的初始化

c、自动计算数组长度:根据初始值的长度确定

d、字符数组的初始化

比较笨拙的方法: charmessage[ ] = { ‘H', ’e‘, ’l‘,’l‘,’o‘ };

快速初始化字符数组: char message[ ] = ”Hello“;尽管它看上去是一个字符串常量,实际上不是。

区分字符数组与字符串常量

如: char message1[ ] = "Hello";

char *message2 = "Hello";

前者初始化一个字符数组的元素,而后者则是一个真正的字符串常量。这个指针变量被初始化为指向这个字符串常量的存储位置。



数组的集中初始化方式如下:

int a[3] = { 1, 2,3 };

int a[3] = { 1, 2 };

int a[ ] = { 1, 2,3 };

int a[3] = { [1] = 1, [ 0 ] = 2 }; (知道此种初始化方法即可)


使用循环顺序存取:

int square[10], i;

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

{

scanf("%d", &square[i]);

}


初始化一个三维数组:




3、 下标引用

下标引用实际执行的就是间接访问。


一维数组:

int b[10];

*(b + 3)这个表达式的意思是:首先 b 的值是一个指向整型的指针,所以 3 这个值根据整型值的长度进行调整。加法运算的结果是另一个指向整型的指针,它所指向的是数组第 1 个元素向后移 3 个整数长度的位置。然后,间接访问这个新位置,或者取得那里的值(右值),或者把一个新值存储于该处(左值)。

除了优先级之外,下标引用和间接访问完全相同。

例如下面两个表达是相同的:

array[ subscript ]

*( array + ( subscript ))


下面涉及 ap 的表达式中,写出使用array 的对等表达式

int array[ 10 ];

int *ap = array + 2;


ap

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值