NYJYA 发表于 2019-2-2 20:14:28

根据题目要求,代码有错误么?

题目描述
用指针方法,在一个一维数组int a的元素中,查找给定的数,若找到则输出该数,若没找到,输出No。

输入描述
第一行:10个整数,空格隔开
第二行:要查找的数


输出描述
找到的数orNo

样例输入
//
11 22 43 56 78 90 76 4 2 10[回车]
43[回车]

//
1 8 3 4 5 6 2 1 7 9[回车]
10[回车]

样例输出
//
43[回车]

//
NO[回车]
#include<stdio.h>
int main()
{
        int a,i,*p,n,flag = 0;
        for(i=0;i<10;i++)
        scanf("%d",&a);
        scanf("%d",&n);
        for(p = &a ;p < &a + 10 ; p++)
        {
                if(*p == n) flag = 1;
        }
        if(flag) printf("%d\n",n);
        elseprintf("NO\n");
        return 0;
}

ba21 发表于 2019-2-2 22:20:48

有没有错误你自己不知道?
如果你想问你代码好不好,那我告诉你太啰嗦。

迷雾道长 发表于 2019-2-3 22:05:15

p++不对吧,++是自增1,判断条件也不对,+10并不是最后一个位置,都要跟int所占的空间相匹配

NYJYA 发表于 2019-2-4 23:27:44

迷雾道长 发表于 2019-2-3 22:05
p++不对吧,++是自增1,判断条件也不对,+10并不是最后一个位置,都要跟int所占的空间相匹配

能说得详细一点吗?

啊涂涂 发表于 2019-2-5 08:38:18

迷雾道长 发表于 2019-2-3 22:05
p++不对吧,++是自增1,判断条件也不对,+10并不是最后一个位置,都要跟int所占的空间相匹配

他写的这个p++可以呀,都是整形嘛,就一下偏移四个字节。+10这一步确实不对,楼主的意思应该是表示出来数组最后一个元素的地址

NYJYA 发表于 2019-2-8 20:56:26

啊涂涂 发表于 2019-2-5 08:38
他写的这个p++可以呀,都是整形嘛,就一下偏移四个字节。+10这一步确实不对,楼主的意思应该是表示出来数 ...

谢谢你,但是请问a+i不是表示a的地址吗?那为什么还会错呢?

啊涂涂 发表于 2019-2-9 14:49:58

本帖最后由 啊涂涂 于 2019-2-9 15:05 编辑

NYJYA 发表于 2019-2-8 20:56
谢谢你,但是请问a+i不是表示的地址吗?那为什么还会错呢?

这个的话你程序上写的是 &a【i】 + 10首先,你的数组是整形的,然后a【i】访问到其中的一个常量数据,结果这里又加上了一个 & ,代表你试图取一个常量的地址,并且对他的地址+10.这肯定是不允许的。本身取常量的地址就是不可以的。你说的 a + i== a【i】这个值的地址,这是因为这两种写法其实本来就差不多,a本身表述的就是数组第一个元素的地址,你对一个元素的地址进行偏移这个是可以的

NYJYA 发表于 2019-2-9 22:46:43

啊涂涂 发表于 2019-2-9 14:49
这个的话你程序上写的是 &a【i】 + 10首先,你的数组是整形的,然后a【i】访问到其中的一个常量数据 ...

也就是不能取常量的地址?不能用常量的地址来进行偏移?

啊涂涂 发表于 2019-2-10 11:17:20

NYJYA 发表于 2019-2-9 22:46
也就是不能取常量的地址?不能用常量的地址来进行偏移?

肯定呀兄弟,你能取 5 的地址嘛&5?{:5_109:}
页: [1]
查看完整版本: 根据题目要求,代码有错误么?