在用行指针的动态分配中,常见的有两种情况
行指针分配内存
- 行数和列数都是输入后分配
如果要用a[1]开始使用,需要在分配行数的时候×(x+1)
int **a;
int x,y;
scanf("%d%d",&x,&y);
a=(char **)malloc(sizeof(char *)*x);
for(int i=0;i<x;i++)
{
a[i]=(char *)malloc(sizeof(char)*y);
}
- 列数已知,行数需要输入后分配
表示一个指向int的指针,步长是原来的50倍
int x;
scanf("%d",&x);
int (*a)[50]=(int (*)[50])malloc(sizeof(int)*x*50);
指针和数组的sizeof
指针和数组有很多相通的地方,但也有许多地方是不相通的
int a[50];
printf("%d\n",sizeof(a));//200
int *b;
b=a;
printf("%d\n",sizeof(b));//4
如果sizeof里的是一个数组名,那么会返回这个数组在内存中的大小
如果是一个指针名,返回的则是这单个指针在内存中的大小