【问题标题】:C Compare array elements using pointersC 使用指针比较数组元素
【发布时间】:2015-11-25 02:10:24
【问题描述】:

我正在尝试编写一个程序来使用指针比较数组元素并给我一些结果;我制作这个简单的程序只是为了测试它是否有效,但我不知道为什么......如果我输入等于数字,没有任何事情发生。所以数组的第一个变量是 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;    
}

【问题讨论】:

  • *ptr + 1 应该是 *(ptr + 1) 和 ptr=&amp;ch; 应该是 ptr=ch;
  • * 在 + 运算符之前应用解引用运算符。

标签: c arrays pointers


【解决方案1】:

永远记住一个快速的规则。

如果元素是某个数组的i th和i+1 th索引,不使用指针访问它们的方法是 a[i] & a[i+1]

现在如果你想在不使用指针的情况下获取这些值的地址,那么你可以使用&amp;a[i] 和&amp;a[i+1]

现在如果你想用指针执行上述两个任务,那么记住数组名本身就是一个指向它的指针。所以如果你想得到i th和i+1 th元素的地址,那就很简单了

(a + i) 和 (a + i + 1)

现在,如果您想获取这些位置的值,那么只需像这样取消引用它

*(a + i) 和 *(a + i + 1)

这就是为什么在这种情况下,它将是*ptr == *(ptr + 1)

注意: &amp;a[i] is equivalent to (a+i) 和a[i] is equivalent to *(a+i)

注2:If you are not using Turbo C in windows system, then it is not recommended to use conio.h because it is not platform independent. I recommend you to move from Turbo C &amp; conio.h

【讨论】:

    【解决方案2】:

    解释正确的@kaylum 评论: 你有if (*ptr == *ptr + 1) 现在*ptr 部分是正确的,但== 的右侧是不正确的,因为你有它的方式是取消引用ptr,然后在该值上加一个。但是,您想增加 ptr 然后取消引用,因此您需要 ()

    【讨论】:

      【解决方案3】:

      你错了

      1. int *ptr=&ch;

      2. *ptr == *ptr + 1

      3. printf("要比较 %d 和 %d 的数字",*ptr,*ptr+1);

      1. 用*ptr=ch替换它,因为ch是一个整数数组,所以如果你直接将它分配给*ptr,它将返回ch的第一个地址,即ch[0]地址将被返回

      2. 使用*ptr+1 和*(ptr+1) 的区别

        *ptr+1 类似于ch[0]+1
        和*(ptr+1) 类似于ch[1]

      1. 你正在做*ptr+1这将增加你的数组ch的第一个位置所以你的输出将比较1 and 2即使你的输入是1 and 5用*(ptr+1)替换它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-06
        • 1970-01-01
        相关资源
        最近更新 更多