根据题目要求,代码有错误么?
题目描述用指针方法,在一个一维数组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;
} 有没有错误你自己不知道?
如果你想问你代码好不好,那我告诉你太啰嗦。 p++不对吧,++是自增1,判断条件也不对,+10并不是最后一个位置,都要跟int所占的空间相匹配 迷雾道长 发表于 2019-2-3 22:05
p++不对吧,++是自增1,判断条件也不对,+10并不是最后一个位置,都要跟int所占的空间相匹配
能说得详细一点吗? 迷雾道长 发表于 2019-2-3 22:05
p++不对吧,++是自增1,判断条件也不对,+10并不是最后一个位置,都要跟int所占的空间相匹配
他写的这个p++可以呀,都是整形嘛,就一下偏移四个字节。+10这一步确实不对,楼主的意思应该是表示出来数组最后一个元素的地址 啊涂涂 发表于 2019-2-5 08:38
他写的这个p++可以呀,都是整形嘛,就一下偏移四个字节。+10这一步确实不对,楼主的意思应该是表示出来数 ...
谢谢你,但是请问a+i不是表示a的地址吗?那为什么还会错呢? 本帖最后由 啊涂涂 于 2019-2-9 15:05 编辑
NYJYA 发表于 2019-2-8 20:56
谢谢你,但是请问a+i不是表示的地址吗?那为什么还会错呢?
这个的话你程序上写的是 &a【i】 + 10首先,你的数组是整形的,然后a【i】访问到其中的一个常量数据,结果这里又加上了一个 & ,代表你试图取一个常量的地址,并且对他的地址+10.这肯定是不允许的。本身取常量的地址就是不可以的。你说的 a + i== a【i】这个值的地址,这是因为这两种写法其实本来就差不多,a本身表述的就是数组第一个元素的地址,你对一个元素的地址进行偏移这个是可以的 啊涂涂 发表于 2019-2-9 14:49
这个的话你程序上写的是 &a【i】 + 10首先,你的数组是整形的,然后a【i】访问到其中的一个常量数据 ...
也就是不能取常量的地址?不能用常量的地址来进行偏移? NYJYA 发表于 2019-2-9 22:46
也就是不能取常量的地址?不能用常量的地址来进行偏移?
肯定呀兄弟,你能取 5 的地址嘛&5?{:5_109:}
页:
[1]