C语言数组定义的方式有以下几种:
1. 一维数组的定义:
```c
type arrayName[arraySize];
```
例如:
```c
int numbers[10]; // 定义一个包含10个整数的数组
float grades[5]; // 定义一个包含5个浮点数的数组
char name[20]; // 定义一个包含20个字符的数组
```
2. 多维数组的定义:
```c
type arrayName[arraySize1][arraySize2];
```
例如:
```c
int matrix[3][3]; // 定义一个3x3的整数矩阵
float image[2][2][3]; // 定义一个2x2x3的浮点数图像
```
3. 使用初始化列表定义数组:
```c
type arrayName[] = {value1, value2, ..., valueN};
```
例如:
```c
int numbers[] = {1, 2, 3, 4, 5}; // 定义一个包含5个整数的数组,并初始化为1、2、3、4、5
char name[] = "John"; // 定义一个包含5个字符的数组,并初始化为J、o、h、n、\0
```
4. 动态分配数组:
```c
type* arrayName = (type*)malloc(arraySize * sizeof(type));
```
例如:
```c
int* numbers = (int*)malloc(10 * sizeof(int)); // 动态分配一个包含10个整数的数组
float* grades = (float*)malloc(5 * sizeof(float)); // 动态分配一个包含5个浮点数的数组
```
需要注意的是,对于动态分配的数组,使用完毕后需要使用`free()`函数释放内存空间。