文章目录
一、数组
1.初始化数组
2.指定初始化容器
3.给数组元素赋值
4.数组边界
5.指定数组的大小
c99创建了变长数组,简称VLA,主要是为了让c成为更好的数值计算语言。
二、多维数组
1.程序示例
//rain.c
#include<stdio.h>
#define MONTHS 12
#define YEARS 5
int main(void){
//用2010~2014年的降水量数据初始化数组,数据过于多,就不一一手敲,没有太多学习意义
const float rain[YEARS][MONTHS] =
{
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
};
int year;
int month;
float subtot;
float total;
printf("YEAR RAINFALL (inches)\n ");
for(year = 0,total = 0;year < YEARS;year++)
{
for(month = 0,subtot = 0;month < MONTHS;month++)
subtot += rain[year][month];
printf("%5d %15.1f\n",2010 + year,subtot);
total += subtot;
}
printf("\nThe yearly average is %.1f inches.\n\n",total/YEARS);
printf("MONTHLY AVERGES :\n\n");
printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct ");
printf(" Nov Dec\n");
for(month = 0;subtot < MONTHS;month++);
{
for(year = 0,subtot = 0;year < YEARS;year++)
subtot += rain[year][month];
printf("%4.1f",subtot/YEARS);
}
printf("\n");
return 0;
}
两层for循环经常用于二维数组
2.多维数组
三、指针和数组
注意:
- ar[n]的意思是*(ar+n)。可以认为*(ar+n)的意思是“到内存的ar位置,然后移动n个单元,检索存储在那里的值。
- 不要混淆*(dates + 2)和*dates + 2。
四、函数、数组和指针
ar[n]与*(ar + n)有着等效的意义
五、指针操作
- 赋值:可以将地址赋给指针。注意,地址应该和指针类型兼容。
- 解引用:*运算符给出指针指向地址上存储的值。
- 取址:&运算符给出指针本身的地址,称为指向指针的指针。
- 指针与整数相加:比如ptr1 + 4和&urn[4]等价。
- 递增指针:ptr++相当于给ptr的值加上4(int的值是4,ptr是地址,是给地址的值加上一个4)。
- 指针减去一个整数:类似上面。
- 递减指针:类似上面递增。
- 指针求差:差值的单位与数组类型的单位相同。
- 比较:两个指针指向相同类型的对象。
注意:不要解引未初始化的指针
六、保护数组中的数据
1.对形式参数使用const
2.const的其他内容
- 可以创建const数组
- 可以创建const指针
- 可以创建指向const指针的指针
七、指针和多维数组
1.指向多维数组的指针
可以使用数组表示法或指针表示法来表示一个数组元素,既可以使用数组名,也可以使用函数名。
2.指针的兼容性
3.函数和多维数组
八、变长数组(VLA)
可以使用变量表示数组大小,这意味着变长数组的大小延迟到程序运行时才确定。