所谓数组,是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分
量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便,
把具有相同类型的若干元素按无序的形式组织起来的一种形式。 这些无序排列的同类数据元素的集合称为数组。数组是用于储存多个
相同类型数据的集合。
一维数组的创建和初始化
数组的创建:
type_t arr_name [const_name];
type_t是指数组的元素类型
arr_name是数组名
const_n是一个常量或者常量表达式,用来指定数组的大小
创建数组有一定的格式,比如说:
int arr1[10];
char arr2[3];
float arr3[5];
double arr4[20];
但下面这种格式是错误的,需特别注意:
int n = 10;
int arr5[n];
总结:在创建数组时,[ ]中不能为0或为空,必须要给一个常量,而不能是变量。
数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值。
int arr1[10] = {1,2,3}; //不完全初始化
int arrr2[] = {1,2,3,4}; //[]中的内容可以省略,默认为arr2[]数组里有4个元素
int arr3[5] = {1,2,3,4,5}; //完全初始化
char arr4[3] = {'a', 98, 'c'}; //arr4[]和arr5[]中存的内容是相同的,因为字符'b'的ASCII值就是98
char arr5[] = {'a', 'b', 'c'}; //数组中只有3个元素
char arr6[] = "abcdef"; //数组中有7个元素,在存储字符串的时候,字符串末尾默认有一个结束字符\0
char *p = "abcdef"; /*一个指针变量p是4字节,而字符串"abcdef"实际有7字节,看似无法存储,其实
在内存中存储的是字符串首元素的地址,所以内存空间完全够用,可以存储*/
一些数组创建的实例:
#include <stdio.h>
int main()
{
char arr5[3] = {'a', 'b', 'c'};
int i = 0;
printf("%s\n", arr2);
return 0;
}
#include <stdio.h>
int main()
{
char *p1 = "abcdef";
char *p2 = "abcdef";
if(p1==p2)
{
printf("p1 == p2\n");
}
else
{
printf("p1 != p2\n");
}
return 0;
}
#include <stdio.h>
int main()
{
char p1[] = "abcdef";
char p2[] = "abcdef";
if(p1==p2)
{
printf("p1 == p2\n");
}
else
{
printf("p1 != p2\n");
}
return 0;
}
一维数组的使用
数组的使用采用[ ]下标引用操作符来实现,它其实就是数组访问的操作符。
注意:
- 数组使用下标来访问,下标从0开始
- 数组的大小可以通过计算得到
int arr[10];
int sz = sizeof(arr)/sizeof(arr[0]);
需特别指出的是,不能在函数内部求数组的大小,因为数组名给函数传参时传的是首元素的地址,这样运行结果会出错。
一维数组的指针访问
#include <stdio.h>
int main()
{
int arr[10] = {0};
int i = 0;
int *p = arr;
int sz = sizeof(arr)/sizeof(arr[0]);
for(i=0; i<sz; i++)
{
*(p+i) = i;
}
for(i=0; i<sz; i++)
{
printf("%d ", *(p+i));
}
return 0;
}
二维数组的创建和初始化
数组在内存中的存储
不论是一维数组,还是二维数组,它们在内存中都是连续存放的。