在C++中为数组动态分配内存的格式如下:
第一步:声明
type (p)[常量1][常量2]...[常量n];
第二步:申请
p=new type[x][常量1][常量2]...[常量n];
说明:先定义一个n维的数组指针,其中p是一个指针变量,x是一个整形变量,
然后申请一个第一维为x的n+1维数组,记住只有第一维x可变。
举例:
1、动态申请一个一维数组
int *p;
int x;
cin>>x;
p=new int[x];
2、动态申请一个二维整型数组
int (*p)[10];
int x;
cin>>x;
p=new int[x][10];
若执行这段程序,给x输入3,则相当于定义一个3行10列的
一个二维数组。实际是申请3102个存储单元,并把其首
地址返回给p,通过p来操纵这个动态数组。
3、动态申请一个三维数组
int (*p)[8][6];
int x;
cin>>x;
p=new int[x][8][6];
注意:
1、申请成功与否,看p的值,若p的值为NULL,则说明申请不成功,
反之,则申请成功。
2、动态申请的存储单元,使用之后应及时返还给系统,方法是:
delete p;即可。
type (p)[常量1][常量2]...[常量n];
第二步:申请
p=new type[x][常量1][常量2]...[常量n];
说明:先定义一个n维的数组指针,其中p是一个指针变量,x是一个整形变量,
然后申请一个第一维为x的n+1维数组,记住只有第一维x可变。
举例:
1、动态申请一个一维数组
int *p;
int x;
cin>>x;
p=new int[x];
2、动态申请一个二维整型数组
int (*p)[10];
int x;
cin>>x;
p=new int[x][10];
若执行这段程序,给x输入3,则相当于定义一个3行10列的
一个二维数组。实际是申请3102个存储单元,并把其首
地址返回给p,通过p来操纵这个动态数组。
3、动态申请一个三维数组
int (*p)[8][6];
int x;
cin>>x;
p=new int[x][8][6];
注意:
1、申请成功与否,看p的值,若p的值为NULL,则说明申请不成功,
反之,则申请成功。
2、动态申请的存储单元,使用之后应及时返还给系统,方法是:
delete p;即可。
///---------------------------------------------------------------->
malloc函数只能申请长度为size的连续空间,也就是说,它只能申请一维数组,但是你可以用一维数组代替二维数组来操作.
也可以用calloc函数来申请n个长度为size的连续空间,也就是说它也是只能申请一维数组,但它申请的格式很像二维数组.可以当作二维数组来操作.
如:
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
void main()
{
char *a;
int x,i,j;
cin>>x;
a=(char *)calloc(x,2*sizeof(char));
for(i=0;i<x;i++)
for(j=0;j<2;j++)
{
scanf("%c",&a[2*i+j]);
}
for(i=0;i<x;i++)
{
for(j=0;j<2;j++)
{
printf("%c ",a[2*i+j]);
}
}
}
///------------------------------------------------------------>
malloc函数只能申请长度为size的连续空间,也就是说,它只能申请一维数组,但是你可以用一维数组代替二维数组来操作.
也可以用calloc函数来申请n个长度为size的连续空间,也就是说它也是只能申请一维数组,但它申请的格式很像二维数组.可以当作二维数组来操作.
如:
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
void main()
{
char *a;
int x,i,j;
cin>>x;
a=(char *)calloc(x,2*sizeof(char));
for(i=0;i<x;i++)
for(j=0;j<2;j++)
{
scanf("%c",&a[2*i+j]);
}
for(i=0;i<x;i++)
{
for(j=0;j<2;j++)
{
printf("%c ",a[2*i+j]);
}
}
}
///------------------------------------------------------------>