gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:39:23 24 4
gpt4 key购买 nike

以下代码

#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: In function ‘main’: 2.c:15:10: warning: assignment from incompatible pointer type [enabled by default] arr_ptr = arr;

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

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

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

最佳答案

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com