为什么指针数组和数组给出相同的输出

时间:2019-05-05 11:33:28

标签: c

1)   如何使用指针数组访问数组元素?

通过指向数组的指针,我们可以像这样(* a)[0]进行访问 ,(∗ a)[22] ,…..像这样

对吗?

但是如何使用指针数组?

2) 检查这三个代码,其中之一使用数组,其中一个使用指针数组,第三个使用双指针,但是都给出相同的输出。为什么??

#include <stdio.h>
int ptr[12];
int main(void) {
if(*(ptr+5)==*(ptr+3)){
printf("Equal");
}
else{
printf("Not Equal");
}
return 0;
}

#include <stdio.h>
int *ptr[12];
int main(void) {
if(*(ptr+5)==*(ptr+3)){
printf("Equal");
}
else{
printf("Not Equal");
}
return 0;
}

#include <stdio.h>
    int **ptr[12];
    int main(void) {
    if(*(ptr+5)==*(ptr+3)){
    printf("Equal");
    }
    else{
    printf("Not Equal");
    }
    return 0;
    }

2 个答案:

答案 0 :(得分:1)

*(ptr+5)中:

  • ptr是数组的名称。
  • 当数组在表达式中使用且不是sizeof或一元&的操作数,也不是用于初始化数组的字符串文字时,它将转换为指向第一个数组的指针元件。因此ptr指向数组的元素0。
  • ptr+5加5,得到一个指向数组元素5的指针。
  • *取消引用指针,从而产生数组元素5的内容。

由于数组是在任何函数外部定义的,因此它将初始化为零。因此元素5为零,因此*(ptr+5)为零。同样,*(ptr+3)为零,因此比较它们表明它们相等。

使用int ptr[12];int *ptr[12];int **ptr[12];的示例仅更改数组中元素的类型。在每种情况下,*(ptr+5)*(ptr+3)引用数组的元素5和3。在每种情况下,元素的值均为零(指针类型为空指针)。

如果要查看数组不同元素之间的差异,请为数组元素分配不同的值。

答案 1 :(得分:1)

  1. 在读取数组时,只需不断增加指针即可。分析 下面的代码:

      #include <stdio.h>
      int main(void) {
        int *ptr[3];
        int a[] = { 0,1,2};
        int b[] = { 3,4,5 };
        int c[] = { 6,7,8 };
        ptr[0] = a;
        ptr[1] = b;
        ptr[2] = c;
        for (int i = 0;i < 3;i++)
        printf("%d %d %d\n",*ptr[0]++,*ptr[1]++,*ptr[2]++);
        return 0;
     }
    
    1. 评论中的答案。