c语言数组赋值问题

c语言怎么把整型变量的值赋给整型数组,比如下面代码(部分)
int (*p)[2];
p=(int(*)[2])malloc((g+2)*2*sizeof(int)); //按最大数动态申请(g+2)行2列的二维数组
int zero=0; //存储连续0的个数
int n=0; //标记二维数组的行数
for(int i=0;i<=g;i++){
if (zigzag[i]==0){ //zigzag[]数组存储的是很小的整数
zero++;
}
if (zigzag[i]!=0){
p[n][0]=zero; /************/
p[n][1]=zigzag[i]; /****************/
n++;
zero=0;
printf("%d\t%d\n",p[n][0],p[n][1]);
}
}
p[n][0]=-1;
p[n][1]=-1;
printf("%d\t%d\n",p[n][0],p[n][1]);
运行结果:

可是!我想要的结果是下面这个

星号注释部分应该怎么改

第1个回答  2013-11-14
你觉得赋值错了是你想当然了!其实不是赋值错了,而是你的逻辑错了!看你这一段代码:
p[n][0]=zero; /************/
p[n][1]=zigzag[i]; /****************/
n++;
zero=0;
printf("%d\t%d\n",p[n][0],p[n][1]);
当n=0的时候你是给p[0][0]和p[0][1]赋值,然后n++,这时候n=1,对不?然后打印语句那里变成了:printf("%d\t%d\n",p[1][0],p[1][1]),明白了么?所以应该把n++这一句移到printf语句后面!你的for语句的边界值也有问题,我就先不跟你说,你先改了n++的位置再运行看看,如果改了之后不知道for那里有什么问题再追问我本回答被提问者采纳
第2个回答  2013-11-14
你这个程序显然是存储zigzag这个数组中,每一段相连0的个数的,与你说的整形数组的赋值有出入
第一张图片那肯定是些内存里的数字,没什么意义,你把n++换一个地方如下:效果应该就好多了:
if (zigzag[i]!=0)
{
p[n][0]=zero; /************/
p[n][1]=zigzag[i]; /****************/

zero=0;
printf("%d\t%d\n",p[n][0],p[n][1]);
n++;
}

如果想继续改,请把要求写的详细一些

qq1320249827

步行者===电子单片机团
相似回答