首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

用int*来实现二维数组,下面的代码有有关问题吗

2013-08-01 
用int**来实现二维数组,下面的代码有问题吗?int** rlt(int**)malloc(sizeof(int*)*2)rlt[0](int*)mallo

用int**来实现二维数组,下面的代码有问题吗?
    int** rlt=(int**)malloc(sizeof(int*)*2);
    rlt[0]=(int*)malloc(sizeof(int)*3);
    rlt[1]=(int*)malloc(sizeof(int)*3);
这样是定义了一个2x3的数组吗?
++rlt和&rlt[1]代表的是同一个地址吗?
我用程序打印出来++rlt指向的是rlt,不管运行多少次++rlt,都指向的是rlt,这是怎么回事啊?
[解决办法]
没错是这样定义二维数组,++rlt会在第一维移动,比如会使得原rlt[1][0]变成现在的rlt[0][0]。
[解决办法]
首先,这么做是没有问题的,可以实现一个二维数组.
其次,不管运行多少次,都只想++rlt,你是要表达什么意思呢?
或者你程序是什么样的,我们都不清楚,你贴点东西出来看看.
这是给你参考的代码.


#include<stdio.h>
#include<stdlib.h>

int main()
{
int **a;
int i = 0,j = 0,k = 1;
a = (int **)malloc(sizeof(int *)*2);
a[0] = (int *)malloc(sizeof(int)*3);
a[1] = (int *)malloc(sizeof(int)*3);

for(i = 0;i < 2; i++)
for(j = 0;j < 3; j++)
a[i][j] = k++;
for(i = 0; i < 2; i++)
for(j = 0; j < 3; j++)
printf("%d\t",a[i][j]);

return 0;
}

热点排行