#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void main()
{
int **a;
int i,j,p;
a=(int**)malloc(3*sizeof(int*));
for(i=0;i<3;i++)
{
*(a+i)=(int*)malloc(2*sizeof(int));
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",(*(a+i)+j));
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
p=*(*(a+i)+j);
printf("%d ",p);
}
}
}
}
在这段代码中,我使用指针动态地将内存分配给我的矩阵......但是我只能在第一行输入值,其余的指针地址正在打印,如下所示..
仅获取第一行元素并给出第一行的输出,但是第二行以后没有输入但是打印了垃圾值。 帮我弄清楚错误。 请帮我弄清楚这段代码中的错误。
答案 0 :(得分:0)
您用于打印的2个循环应位于用于读取输入的其他for
循环之外。
像
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",(*(a+i)+j));
}
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
p=*(*(a+i)+j);
printf("%d ",p);
}
}
另外,根据您的程序,您使用的矩阵似乎是3*3
矩阵(表示9个整数),但是您只在int
内为for
分配内存{1}}循环
*(a+i)=(int*)malloc(2*sizeof(int));
尝试为3个整数分配内存,它应该可以正常工作
*(a+i)=(int*)malloc(3*sizeof(int));
更多事情
1)如果您只打印该值,则不需要另一个变量p
。
printf("%d ",*(*(a+i)+j));
2)您无需输入malloc()
的回复,请参阅this。
答案 1 :(得分:0)
您应该更正以下代码:
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
scanf("%d",(*(a+i)+j));
}
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
p=*(*(a+i)+j);
printf("%d ",p);
}
}
首先,代码应该是:
for(j=0; j<2; j++)
scanf("%d", (*(a+i)+j));
其次,for
循环应放在外面。