C使用指针比较数组元素

时间:2015-11-25 02:10:25

标签: 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=&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;

}

3 个答案:

答案 0 :(得分:3)

永远记住快速规则。

如果元素是某个数组的i thi+1 th索引,那么在不使用指针的情况下访问它们的方法是 a[i]&amp; a[i+1]

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

现在,如果你想用指针执行上述两个任务,那么记住数组名称本身就是指向它的指针。因此,如果您想获取i thi+1 th元素的地址,那么它就是

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

现在,如果您想获取这些位置的值,那么只需将其取消引用(如

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

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

注意: &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 & conio.h

答案 1 :(得分:0)

解释@kaylum评论哪个是正确的: 您已经if (*ptr == *ptr + 1)现在*ptr部分是正确的,但==的右侧是不正确的,因为您将其取消引用ptr,然后再添加一个ptr值。但是,您希望增加()然后取消引用,从而为什么需要#import <UIKit/UIKit.h> IB_DESIGNABLE @interface CrinkedView : UIView @property (nonatomic, strong) IBInspectable UIImage *crinkedImage; @end

答案 2 :(得分:0)

你犯了错误

  
      
  1. int * ptr =&amp; ch;

  2.   
  3. * ptr == * ptr + 1

  4.   
  5. printf(“要比较%d和%d的数字”,* ptr, * ptr + 1 );

  6.   
  1. 将其替换为*ptr=ch becoz ch是一个整数数组,因此如果您将其直接分配给*ptr,它将返回ch的第一个地址,即{ {1}}地址将返回

  2. 使用ch[0]*ptr+1

    之间的区别

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

  3. Explained

    1. 您正在进行ch[1]这会增加数组*ptr+1的第一个位置,因此即使您的输入为ch,您的输出仍会为数字1 and 2,请将其替换为{ {1}}