数组可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
char s[10];
short int a[10];
int a[10];
long int a[10];
float a[10];
char* a[10];
int* b[10];
struct stu boy[10];
int a[30];
int a[2][30];
数据类型 数组名[数组元素个数]
int a[10];
数据类型 数组名[行的个数][列的个数]
int a[3][4];
定义数组的时候,顺便给数组赋初始值
int a[5]={1,2,3,4,5};
int a[3][4] = {
{0, 1, 2, 3} , /* 初始化索引号为 0 的行 */
{4, 5, 6, 7} , /* 初始化索引号为 1 的行 */
{8, 9, 10, 11} /* 初始化索引号为 2 的行 */
};
数组的名字就是数组的首地址,即第0个元素的地址,是个常量
int a[5];
a[0] = 0;
a[1] = 1;
a[2] = 2;
a[3] = 3;
a[4] = 4;
a[0][0] = 0
a[0][1] = 1
a[0][2] = 2
a[0][3] = 3
a[1][0] = 4
a[1][1] = 5
a[1][2] = 6
a[1][3] = 7
a[2][0] = 8
a[2][1] = 9
a[2][2] = 10
a[2][3] = 11
形式参数是一个指针
void myFunction(int *param)
{
}
形式参数是一个已定义大小的数组
void myFunction(int param[10])
{
}
形式参数是一个未定义大小的数组
void myFunction(int param[])
{
}
C 语言不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。
如果想要从函数返回一个一维数组,必须声明一个返回指针的函数
int * myFunction()
{
}
int * getRandom( )
{
static int r[10];
int i;
srand( (unsigned)time( NULL ) );
for ( i = 0; i < 10; ++i)
{
r[i] = rand();
printf( "r[%d] = %d\n", i, r[i]);
}
return r;
}
数组名本身是一个常量指针,意味着它的值是不能被改变的,一旦确定,就不能再指向其他地方。
double balance[50];
balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址,把p赋值为balance的第一个元素的地址,看如下代码。
double *p;
double balance[10];
p = balance;
静态数组是在编译时声明并分配内存空间的数组,静态数组具有固定的大小,在声明数组时需要指定数组的长度。
int staticArray[5]; // 静态数组声明
int staticArray[] = {1, 2, 3, 4, 5}; // 静态数组声明并初始化
int length = sizeof(staticArray) / sizeof(staticArray[0]); //计算静态数组的长度
动态数组是在运行时通过动态内存分配函数(如 malloc 和 calloc)手动分配内存的数组。
int size = 5;
int *dynamicArray = (int *)malloc(size * sizeof(int)); // 动态数组内存分配
// 使用动态数组
free(dynamicArray); // 动态数组内存释放
malloc 函数、calloc函数、free 函数会在后续的文章中讲解。