C使用指针比较数组元素

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

我试图制作一个程序,用指针比较数组元素,并给出一些结果;我做这个简单的程序只是为了测试它是否有效,但我不知道为什么。。如果我输入相等的数字,什么都不会发生。数组的第一个变量是ptr,ptr+1表示下一个元素,如果我直接输入ch[0]==ch[1],它会工作。之后,我想让程序比较字符是否相同

#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
,然后取消引用,这就是为什么您需要
()

您犯了错误

  • int*ptr=&ch

  • *ptr==*ptr+1

  • printf(“比较%d和%d的数字,*ptr,*ptr+1

  • 将其替换为
    *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*在+运算符之前应用取消引用运算符。