C语言 如何定义一个二维指针数组?

 我来答
天云小店
2015-05-21 · TA获得超过2.8万个赞
知道大有可为答主
回答量:3281
采纳率:91%
帮助的人:785万
展开全部

定义二维指针数组与定义一维指针数组差不多,只是矩阵的维度增加了一维而已。


下面通过具体的实例来说明如何定义一个二维数组

int *p[2][3];  // 定义一个二维数组,只是定义,并没有分配地址空间
int i,j;  // 数组的行数和列数
// 下面的2个for循环是用来对二维指针数组进行初始化的,也即分配地址。如果不进行初始化操作,就会使指针变为野指针(即指向不明)。
for(i=0; i<2; i++)
    for(j=0; j<3; j++)
        p[i][j] = (int *)malloc(sizeof(int));
*p[0][1] = 2; // 对指针数组中指针所指向的内存单元进行赋值操作
printf("%d\n", *p[0][1]);  // 输出结果
厚鸿骞2z
2011-04-02
知道答主
回答量:18
采纳率:0%
帮助的人:13.8万
展开全部
有人说指针就是数组,其实这个是可以正确理解的。一个二维数组的数组名就代表一个二级指针,可以用指针来操作二维数组,这是到处都找的到的可以这样:
int **p=NULL;
int a[i][j];
p=a;
a[i][j]=*(*(p+i)+j);
动态定义一个二维数组:
需要用两次循环,free的时候也是得用循环;
追问
那如何分配呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
外出的流浪者
2011-04-01 · TA获得超过236个赞
知道小有建树答主
回答量:136
采纳率:62%
帮助的人:57.2万
展开全部
有两种方式(假设数组是a[3][4]):
一。一个一个的取元素
int a[3][4];
int *p;
p=a[0];
则将指针指向了数组a的第一个元素
二。一行一行的取元素
int a[3][4];
int (*p)[4];
p=a;
则创建了一个指向包含4个元素的指针,它可以一次指向数组的一行
追问
一维的我大概懂的 
就是二维的不太明白....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-04-01
展开全部
int array[2][2]={{1,2},{3,4}};
int* p[2][2];//here...
int (*p)[2][2];
更多追问追答
追问
那怎么给二维指针数组分配空间呢?(用malloc)
还有该如何把这些地址传向自定义函数呢?
希望用能用个例子帮我解释下....谢谢啊
追答
int main(void)
{
int **p;
p=(int**)calloc(8,sizeof(int)*8);
if(p==NULL)printf("fail");
else printf("succeed");
free(p);
return 0;
}

Apply for a memory of 8*8 int...
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式