数组<->指针<->动态数组之间的关系

  敲代码时候需要动态声明一个二维数组,然后开始然,然不清,然后发现指针也然不清了...然后总结一些笔记关于数组,指针,malloc,free。
  • 变量
//数组与指针关系
int a;
int *p;
p=&a;
//malloc
int *p=(int *)malloc(sizeof(int ));
//free
free(p);
  • 一维数组
//数组与指针关系
 int a[N];
 int *p;
 p=a;
 //malloc
 int *p=(int *)malloc(sizeof(int )*N);
 //free
 free(p);
  • 二维数组

1.数组指针

//数组与指针关系
int a[N][M];
int (*p)[M]=a; //(*p)是一个指针,类型是int(*)[M];即指向int型的长度为M的一维数组,(因为之前a声明的数组大小是N*M,所以可以通过p++或p[N]来访问不同行,这里也可以看出一点二维数组a在定义的时候的类型是int (*)[]型,这也许就是不能把一个二维数组赋给一个二级指针的原因)
//malloc(这里面用malloc 必须是要知道M(你知道我说的M特指什么));
int (*p)[M]=(int (*)[M])malloc(sizeof(int)*N*M);
//free
free(p);

2.指针数组

//数组与指针关系
int a[N][M];
int *p[N];//p[N]是一个数组,什么数组呢,int *型;即一个长度为N的一维数组保存的是int*型的指针。(这样我们就可以把a[N]一个一个赋值给p[N])
for(i=0;i<N;i++)
    p[i]=a[i];
//malloc(这里的malloc需要知道N,you know that)
int *p[N];
for(i=0;i<n;i+)
    p[i]=(int *)malloc(sizeof(int )*M);
//free(这里p是一个数组不用free,需要free掉的是数组保存的指针指向的的空间)
for(i=0;i;<<n;i++)
    free(p[i]);

3.二级指针

//数组与指针关系
int a[N][M];
int **p;
p=a;//哈哈,你会发现他会说类型不符,至于为什么上面说了
p=&a;//哈哈,你会发现他还是会说类型不符,至于为什么和刚刚一样
//malloc(这里malloc和指针数组类似,相当于是找了一个二级指针去指向那个指针数组)
int **p;
p=(int **)malloc(sizeof(int *)*N);
for(i=0;i<n;i++)
    p[i]=(int *)malloc(sizeof(int )*M);
//free(这里要先将一级指针释放,然后讲二级指针释放)
for(i=0;i<n;i++)
    free(p[i]);
free(p);

over

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值