首页 > 解决方案 > 为什么指针数组和数组给出相同的输出

问题描述

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;
    }

标签: c

解决方案


*(ptr+5)

  • ptr是数组的名称。
  • 当数组在表达式中使用并且不是操作数sizeof或一元&数组并且不是用于初始化数组的字符串文字时,它会转换为指向其第一个元素的指针。所以ptr指向数组的元素 0。
  • ptr+5加五,得到一个指向数组元素 5 的指针。
  • *取消引用指针,生成数组元素 5 的内容。

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

int ptr[12];带有、int *ptr[12];和的示例int **ptr[12];仅更改数组中元素的类型。在每种情况下*(ptr+5)*(ptr+3)请参阅数组的元素 5 和 3。在每种情况下,元素的值都是零(指针类型的空指针)。

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


推荐阅读