LS的动态二维数组做得实在有点不敢恭维
我来给你写了一个
#include <stdio.h>
#include <malloc.h>
int main()
{
int **a; /*注意这里是指针的指针*/
int *p;
int m;
int n;
int i, j, c=0;
do
{
printf( "Input m=" );
scanf( "%d", &m );
}
while( m < 1 );
do
{
printf( "Input n=" );
scanf( "%d", &n );
}
while( n < 1 );
/************************************************
* 以下四行动态分配数组
*************************************************/
a = ( int ** )malloc( m * sizeof( int * ) );
/*
这句分配的是一个指针数组
也就是说,a 指向的这段内存空间里存放的是
指针的值
*/
for( i = 0; i < m; i++ )
{
p = ( int * )malloc( n * sizeof( int ) ); /*这句分配的才是数组*/
a[ i ] = p; /*给a的元素赋值,使它等于新分配的内存的地址*/
}
/*************************************************/
/*************************************************
这下面的就和一般的二维数组操作一样了 */
for( i = 0; i < m; i++ )
{
for( j = 0; j < n; j++ )
a[i][j] = ++c;
}
for( i = 0; i < m; i++ )
{
for( j = 0; j < n; j++ )
printf( "a[%d][%d]=%-3d ", i,j , a[i][j] );
printf( "\n" );
}
/**************************************************
释放内存空间 */
for( i = 0; i < m; i++ )
free( a[i] );
free( a );
return 0;
}
总结一下:
1、要声明一个二重指针;
2、给二重指针分配内存空间,注意每一个元素应该是一个指针,即:指针数组;
3、再给指针数组里的每一个元素赋值,当然要先分配一块内存才得行哈