c语言问题,用指针为一个二维数组赋值
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;才可以但我的还是不行,那有什么办法帮我把这个二维数组赋值呢?? 展开
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");
}
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));
}
希望对你有点帮助
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++;
while(scanf("%f", &ptr+i)&&i!=7) 改成 while(i!=6 && scanf("%lf", ptr+i))
for(j=0;j<3;j++)
scanf("l%f",a[i][j]);
我也是新手,不知道这样做对不对