发布网友 发布时间:2022-06-27 07:06
共5个回答
热心网友 时间:2024-11-25 16:29
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");
}
热心网友 时间:2024-11-25 16:30
while(scanf("%lf", &ptr+i)&&i!=7)热心网友 时间:2024-11-25 16:30
顺着你的想法 我给你改了一下 对于楼上写的代码 我说一下 他那里的ptr = array[0] ;我说这个希望能增加你对指针的理解。热心网友 时间:2024-11-25 16:31
可以强行转换,ptr=(double *)arr,不过你这个程序还有个地方有问题:热心网友 时间:2024-11-25 16:31
for( i=0;i<2;i++)