小傻丶 发表于 2019-1-3 16:24:35

B站课后题 指针

void main()
int *p,i,a
p=a
for(i=0;i<10,i++)
scanf("%d",p++)
for(i=0;i<10;i++;p++)
printf("%d",*p)

小傻丶 发表于 2019-1-3 16:26:29

这错在哪

BngThea 发表于 2019-1-3 16:58:15

首先,少分号。
其次p++将移动整个数组的长度,因为你指向的是整个数组

小傻丶 发表于 2019-1-4 17:17:54

BngThea 发表于 2019-1-3 16:58
首先,少分号。
其次p++将移动整个数组的长度,因为你指向的是整个数组

for(p=&a;p<(a+10);p++)
printf("%d\n",*p);
这样为什么就可以

BngThea 发表于 2019-1-4 17:24:28

小傻丶 发表于 2019-1-4 17:17
for(p=&a;p

这相当于p为数组a的第一个元素的地址,当然是可以的

小傻丶 发表于 2019-1-4 17:28:55

BngThea 发表于 2019-1-4 17:24
这相当于p为数组a的第一个元素的地址,当然是可以的

第一个也是p为数组a的第一个元素地址啊

quark 发表于 2019-1-4 19:03:50

小傻丶 发表于 2019-1-4 17:17
for(p=&a;p

这是一条语句,好不好。。。

chinggggg 发表于 2019-1-4 19:45:33

for(i=0;i<10;i++;p++)
printf("%d",*p)

for里面多了个分号呀

Liyr 发表于 2019-1-14 23:18:16

本帖最后由 Liyr 于 2019-1-14 23:23 编辑

p = a; //这里a是第一个元素的地址;如果要写成 p = &a; p必须是 int (*p);

scanf("%d", p++);//p是一个地址,你不能对地址赋值,可以写成 p+i 或者 &p

for(i = 0; i < 10; i++; p++)   //p++ 是多余的

printf("%d ", *p);    //写成 printf("%d ", *(p+i));或者printf("%d ", p):

还有:
      代码规范;
      主函数要返回一个int;
      属于for循环的语句最好用{}括起来;

有错请指正。

justjust001 发表于 2019-4-26 17:07:24

1.定义变量的语句、scanf、printf后面少分号。
2.for(i = 0; i < 10; i++; p++) ,语法错误。修改为 for(i = 0; i < 10; i++, p++)
3.看程序的意思是想输入数组各元素的值,然后输出。但是scanf输入元素值之后,p指针指向了数组后面的地址,未重置p的值,*p是数组所占内存后面地址的数据。
在scanf之后,重新p=a; 即可。

liu306178205 发表于 2019-4-26 19:16:01

void main()
{
        int *p, i, a;
        p = a;
        for (i = 0; i < 10; i++)
                scanf("%d", p++);
        p = a;//指针移动回来
        for (i = 0; i < 10; i++,p++)
                printf("%d\n", *p);
}
下回那编译器试一下再发啊连{}都没有;也不全
页: [1]
查看完整版本: B站课后题 指针