首页 > 解决方案 > 指向数组的指针存在的原因是什么?

问题描述

以下代码

#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作为指向数组的指针还不够吗?

标签: carrays

解决方案


拥有指向数组的指针的原因与使用类型的原因相同:

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

推荐阅读