以下代码
#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
作为指向数组的指针还不够吗?
答案 0 :(得分:1)
拥有数组指针的原因与类型的原因相同
int
的指针与指向char
的指针分开的原因相同。甚至是我们将int
与char
分开的原因-为所有变量提供类型有助于确保将其用于预期的目的。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
轻松到达带有指针的数组。