1、类型标识符,数组名[常量表达式];例如int a[10];其中a为地址常量。
2、如变量的定义一样,inta;double a;floata等;数组的定义只是把后面的变量名改为数组名而已。
3、int a[10]就是定义了一个数组名为a的数组;此数组有10个元素。其中各元素从a[0]到a[9];并没有a[10]元素。
两种方法:
转化为一维数组申请
先申请全部行首指针,再按行逐行申请
1、方法一:
a=(int *)malloc(sizeof(int),(unsigned)m*n)使用的时候就和一般的二维数组一样。
举个例子给你:
#include "stdlib.h"
#include "stdio.h"
#include <malloc.h>
int main()
{
int i,j
int n//这个就是需要指定的行数
int (*p)[10]
scanf("%d",&n)//取得行数
//动态生成二维数组,指定列数为10,如果想改,自己该里面
的参数,如果想定义n行2列就为: p=(int (*)[2])malloc(n*2*sizeof(int))
p=(int (*)[10])malloc(n*10*sizeof(int)) //动态申请n行10列的二维数组
for(i=0i<ni++)
for(j=0j<10j++)
p[i][j]=i*j
for(i=0i<ni++)
{
for(j=0j<10j++)
printf("%d,",p[i][j])
printf("\n")
}
free(p)
return 0
}
2、方法二:
#include <stdio.h>#include <malloc.h>
main()
{
int i = 0
int j = 0
int line = 0
int row = 0
int **p = NULL
printf("input the line of the array:\n")
scanf("%d", &line)
printf("input the row of the array:\n")
scanf("%d", &row)
p = (int **)malloc(sizeof(int *) * line)
if (NULL == p)
{
return
}
for (i = 0 i < line i++)
{
*(p + i) = (int *)malloc(sizeof(int) * row)
if (NULL == *(p + i))
{
return
}
}
/*input data*/
for (i = 0 i < line i++)
{
for(j = 0 j < row j++)
{
p[i][j] = i + 1
}
}
/*output data*/
for (i = 0 i < line i++)
{
for(j = 0 j < row j++)
{
printf("%d", p[i][j])
}
}
/*free every line point*/
for (i = 0 i < line i++)
{
free(*(p + i))
p[i] = NULL
}
free(p)
p = NULL
}
在C语言中使用数组必须先进行定义。一维数组的定义方式为:
类型说明符 数组名 [常量表达式]
其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。例如:
对于数组类型说明应注意以下几点:
1) 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。
2) 数组名的书写规则应符合标识符的书写规定。
3) 数组名不能与其它变量名相同。例如
是错误的。
4) 方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0], a[1], a[2], a[3], a[4]。
5) 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。例如:
是合法的。但是下述说明方式是错误的。
6) 允许在同一个类型说明中,说明多个数组和多个变量。例如: