鱼C论坛

 找回密码
 立即注册
查看: 1855|回复: 8

[已解决]根据题目要求,代码有错误么?

[复制链接]
发表于 2019-2-2 20:14:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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


输出描述
找到的数orNo

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

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

样例输出
//[1]
43[回车]

//[2]
NO[回车]
#include<stdio.h>
int main()
{
        int a[10],i,*p,n,flag = 0;
        for(i=0;i<10;i++)
        scanf("%d",&a[i]);
        scanf("%d",&n);
        for(p = &a[0] ;p < &a[0] + 10 ; p++)
        {
                if(*p == n) flag = 1;
        }
        if(flag) printf("%d\n",n);
        else  printf("NO\n");
        return 0;
}
最佳答案
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本身表述的就是数组第一个元素的地址,你对一个元素的地址进行偏移这个是可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-2 22:20:48 | 显示全部楼层
有没有错误你自己不知道?
如果你想问你代码好不好,那我告诉你太啰嗦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-3 22:05:15 | 显示全部楼层
p++不对吧,++是自增1,判断条件也不对,+10并不是最后一个位置,都要跟int所占的空间相匹配
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

能说得详细一点吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

他写的这个p++可以呀,都是整形嘛,就一下偏移四个字节。+10这一步确实不对,楼主的意思应该是表示出来数组最后一个元素的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


谢谢你,但是请问a+i不是表示
a[i]
的地址吗?那为什么还会错呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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本身表述的就是数组第一个元素的地址,你对一个元素的地址进行偏移这个是可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

也就是不能取常量的地址?不能用常量的地址来进行偏移?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-10 11:17:20 | 显示全部楼层
NYJYA 发表于 2019-2-9 22:46
也就是不能取常量的地址?不能用常量的地址来进行偏移?

肯定呀兄弟,你能取 5 的地址嘛  &5?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 08:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表