c语言问题,用指针为一个二维数组赋值

doublearr[2][3];double*ptr;inti=0;ptr=arr;printf("Pleseenter2*3numbers:\n");while(sca... double arr[2][3];
double *ptr;
int i=0;
ptr=arr;
printf("Plese enter 2*3 numbers: \n");
while(scanf("%f", &ptr+i)&&i!=7)
i++;

double arr[2][3];
double *ptr;
ptr=arr;//这个在我的软件wintc上是不行的,我看网上说用double **ptr;才可以但我的还是不行,那有什么办法帮我把这个二维数组赋值呢??
展开
 我来答
fzy范忠云
推荐于2017-09-10 · TA获得超过459个赞
知道小有建树答主
回答量:117
采纳率:100%
帮助的人:68万
展开全部

ptr=arr;

其实你这样赋值也是可以的,是没有问题的。

因为arr是二维数组的数组名,它(arr)本身就代表这个二维数组的第0行的地址。

问题关键不是出现在这里,而是在你程序的while循环语句中

while(scanf("%f", &ptr+i)&&i!=7)

i++;

你这样写是不对的,首先ptr指向的是一个地址,所以ptr+i也是一个地址,所以这里就不能用变址运算符"&"了。第二个问题是,i 从0自加到6,这里面其实有了7个数,明显超过了arr数组的长度,这样是不对的。这个循环还有一个问题就是,这本身就是一个不正常的循环(自己想想为什么)

下面是我帮你改改的代码,希望对你会有帮助。

#include<stdio.h>

void main()

{

double arr[2][3];

double *ptr;

int i=0;

ptr=*arr;      //把数组arr第0行第0列的地址赋给ptr,其作用与ptr=arr;相同,

                     但不建议采用ptr=arr;这样的赋值//

printf("Plese enter 2*3 numbers: \n");

for(i=0;i<6;i++)

scanf("%lf",ptr+i);   //注意不要将ptr+i 写成&ptr+i 或&(ptr+i),否则出错//

for(i=0;i<6;i++)

printf("%g  ",*ptr++);

printf("\n");

}

1241219308
2011-03-13
知道答主
回答量:30
采纳率:0%
帮助的人:5.2万
展开全部
while(scanf("%lf", &ptr+i)&&i!=7)
i++; 这个我不太明白,我也是新手,我也遇到过这种情况,我是这样做的:
#include<stdio.h>
void main()
{
double arr[2][3];
double *ptr;
int i=0;
ptr=&arr[0][0];
printf("Plese enter 2*3 numbers: \n");
for(i=0;i<6;i++)
scanf("%lf",ptr+i);

for(i=0;i<6;i++)
printf("%lf ",*(ptr+i));
}
希望对你有点帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
斯文且闲雅丶风光2
2011-03-13 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:88.3万
展开全部
顺着你的想法 我给你改了一下 对于楼上写的代码 我说一下 他那里的ptr = array[0] ;我说这个希望能增加你对指针的理解。

double arr[2][3];
double( *ptr)[3];
int i=0;
ptr=arr;
printf("Plese enter 2*3 numbers: \n");
while(scanf("%f",*((*p)+i))&&i!=7)
i++;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
甄崖0bR
2011-03-13
知道答主
回答量:2
采纳率:0%
帮助的人:3377
展开全部
可以强行转换,ptr=(double *)arr,不过你这个程序还有个地方有问题:
while(scanf("%f", &ptr+i)&&i!=7) 改成 while(i!=6 && scanf("%lf", ptr+i))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
树袋熊刘
2011-03-13 · TA获得超过189个赞
知道答主
回答量:79
采纳率:100%
帮助的人:75.8万
展开全部
for( i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("l%f",a[i][j]);
我也是新手,不知道这样做对不对
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式