存在指向数组的指针的原因是什么?

时间:2019-05-12 22:26:49

标签: c arrays

以下代码

#include <stdio.h>
char * arr[]={"my","array"};
main()
{
        printf("%p %p\n",arr, &arr);
        char *(*arr_ptr)[2];
        arr_ptr = &arr;
        arr_ptr = arr;
}

编译时显示警告

  

2.c:在“ main”功能中:   2.c:15:10:警告:来自不兼容指针类型的分配[默认启用] arr_ptr = arr;

但是,正在运行的已编译程序将打印两个相同的数字。

结论是,存在一个不同的类型,即“指向数组的指针”,该类型恰好指向数组的第一个元素。

我的问题是:存在这样的指针类型的原因是什么,不仅仅是将arr作为指向数组的指针还不够吗?

2 个答案:

答案 0 :(得分:1)

拥有数组指针的原因与类型的原因相同

  • 它有助于减少错误。如果声明一个变量为数组的指针,而您尝试为其分配不同类型的指针,则编译器可以在编译代码时向您发出警告,而不是让程序在执行时执行错误的操作。这与我们将指向int的指针与指向char的指针分开的原因相同。甚至是我们将intchar分开的原因-为所有变量提供类型有助于确保将其用于预期的目的。
  • 它提供了便利。当您有一个数组数组并且要处理特定的行时,可能会有指向这些行之一(数组)的指针A。然后A+1是下一行,而不是该行中的下一个元素,而A-2是后两行。因此,指向数组的指针可用于将数组作为对象使用,并且编译器将为您跟踪算法,因此您不必使用A-2*NumberOfColumns来计算返回两行的元素数。

答案 1 :(得分:0)

因为不是这样,指针的工作就是指向思想。您可以使用该类型的指针(指向数组的指针)来简化工作,当您知道数组的1.元素时,您就会知道其余的内容,因此指针会变差这是一个简单的例子

 int i = 0;

  int arr[4] = { 1, 2, 3, 4}; 

  for(;i<4;i++){
    printf("%d \n",arr[i]);
  }

输出将是:

  

1 2 3 4

但使用简单的指针

  *arr = 5;
  *(arr+1)=6;
  *(arr+2)=7;
  *(arr+3)=8;

输出将是:

  

5 6 7 8

轻松到达带有指针的数组。

相关问题