以下代码

#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:在“主要”功能中:
  2.c:15:10:警告:来自不兼容指针类型的分配[默认启用] arr_ptr = arr;


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

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

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

最佳答案

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


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

关于c - 存在数组指针的原因是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56103962/

10-11 23:06
查看更多