C使用指针比较数组元素
我试图制作一个程序,用指针比较数组元素,并给出一些结果;我做这个简单的程序只是为了测试它是否有效,但我不知道为什么。。如果我输入相等的数字,什么都不会发生。数组的第一个变量是ptr,ptr+1表示下一个元素,如果我直接输入ch[0]==ch[1],它会工作。之后,我想让程序比较字符是否相同C使用指针比较数组元素,c,arrays,pointers,C,Arrays,Pointers,我试图制作一个程序,用指针比较数组元素,并给出一些结果;我做这个简单的程序只是为了测试它是否有效,但我不知道为什么。。如果我输入相等的数字,什么都不会发生。数组的第一个变量是ptr,ptr+1表示下一个元素,如果我直接输入ch[0]==ch[1],它会工作。之后,我想让程序比较字符是否相同 #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { int ch[2]; int
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
int ch[2];
int *ptr=&ch;
scanf("%d%d",&ch[0],&ch[1]);
printf("Numbers to compare %d and %d",*ptr,*ptr+1);
if (*ptr == *ptr + 1){
printf("Equals numbers\n");
}
return 0;
}
#包括
#包括
#包括
int main()
{
int-ch[2];
int*ptr=&ch;
scanf(“%d%d”、&ch[0]、&ch[1]);
printf(“比较%d和%d的数字”,*ptr,*ptr+1);
如果(*ptr==*ptr+1){
printf(“等于数字\n”);
}
返回0;
}
要解释@kaylum注释的正确性:
您有if(*ptr==*ptr+1)
现在*ptr
部分是正确的,但是=
的右侧是不正确的,因为您使用它的方式是取消引用ptr
,然后向该值添加一个。但是,您希望增加ptr
,然后取消引用,这就是为什么您需要()
您犯了错误
*ptr=ch
因为ch
是一个整数数组,因此如果将其直接分配给*ptr
它将返回ch
的第一个地址,即ch[0]
地址将返回*ptr+1
和*(ptr+1)
*ptr+1
类似于ch[0]+1
而
*(ptr+1)
类似于ch[1]
*ptr+1
这将增加数组ch
的第一个位置,因此即使您的输入是1和5
也会对输出进行编号以比较1和2
,将其替换为*(ptr+1)
永远记住一条快速规则 如果元素是某个数组的
i th
和i+1 th
索引,则不使用指针访问它们的方法是
a[i]
和a[i+1]
现在,如果您不想使用指针来获取这些值的地址,那么可以执行&a[i]
和&a[i+1]
现在,如果要使用指针执行上述两个任务,请记住数组名本身就是指向它的指针。因此,如果您想获得i th
和i+1 th
元素的地址,那么
(a+i)
和(a+i+1)
现在,如果您想获得这些位置的值,只需像
*(a+i)
和*(a+i+1)
这就是为什么在这种情况下,它将是*ptr==*(ptr+1)
注意:&a[i]等同于(a+i)
而a[i]相当于*(a+i)
注2:
如果您在windows系统中未使用Turbo C,则不建议使用conio.h,因为它不是独立于平台的。我建议您离开Turbo C&conio.h
*ptr+1
应该是*(ptr+1)
和ptr=&ch代码>应为ptr=ch代码>*在+运算符之前应用取消引用运算符。