C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
数组
数组是一系列相同类型元素有序的集合。
数组的定义:
一般形式为:类型符 数组名 [常量表达式]如 int a[5]; 表示数组有五个元素,a[0]-a[5],不存在元素a[5]。
*注意: 1.常量表达式中可以包含常量和符号常量,如“int a[3+5];"
2.c语言不允许对数组的大小作动态定义。
数组的初始化:
通过查阅书籍,搜索资料,收集到如下初始化方式:
数组的大小和长度:
sizeof(数据类型)*元素个数
sizeof(数组名)
len=5时,便使用malloc函数分配20个字节,并强制转换成int类型的地址,malloc函数只返回第一个字节地址,通过+1操作获取后面的地址。
使用free(pArr)释放内存。
数组的地址:
1.a与&a
虽然a=&a,在值上看起来相等,也都表示数组的首地址,我们通过+1操作来了解它们的区别。
a:它的类型是int* 所以它+1的步长为数组元素大小的字节数,也就是4个字节,a+1就是a[1]的地址。
&a:它的类型数int *[10] 所以它+1的步长为数组大小的字节数,也就是40个字节,&a+1就是a[10]的地址(a[10]已经越界了)。
2.a[0]与&a[0]
a[0]:数组中的元素,值为0,a[0]+1=1。
&a[0]:数组首元素的地址,其值与a和&a相同,它的类型为int *,所以它+1的步长为数组元素大小的字节数,也就是4个字节,&a[0]+1就是a[1]的地址。
数组的使用方式
1.数组形式
2.指针形式
修改数组内容的汇编过程:
1.通过数组名找到首地址;
2.根据地址的偏移量,找到需要修改元素的地址
3.修改内容
几点学习建议:
1.基本概念很重要。无论学C,还是学C++,基本概念都是第一位的,也是比较困难的,但只有把握了基本概念才能把握整体脉络,才能居高临下。
2.C是C++的子集,它的基本概念和设计方法相对比较容易理解,初学者可从它入手。
3.如果要学好C++,建议初学者最好别在如VC,BCB平台下写程序,那种自动化的代码生成,花花绿绿的界面,会让你手足无措。最好先找一片空地(unix,dos),从头做起,写几个大点的程序,数个回合,再到VC,BCB下看看,你会轻松得很。在我看来,学好C/C++是成为VC,BCB高手的必由之路。
4.不要妄想速成,必须得一个byte,一个bit的去抠,尽量搞清楚每一个问题。