本文主要是介绍C语言-数组的指针/数组指针/指向第一个元素的指针,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
下面定义了一个数组arr,有26个元素,其中前两个元素分别是666,777
int arr[26]={666,777};
1.数组的指针,本质上不是指向数组第一个元素的指针
上述代码中,arr默认指向数组的第一个元素,所以代码中直接使用arr,则表示一个int类型的指针,根据这个指针可以找到666,例如下面这样
printf("%p\n",*arr);
但是代码&arr
的意思是数组的指针,而不是指向数组第一个元素的指针,虽然下面的代码打印的内容是完全相同
printf("%p\n",&arr);//数组的指针
printf("%p\n",arr); //数组的第一个元素的指针
所以我刻意的认为,“数组指针等于指向数组第一个元素的指针”这句话是错的,数组指针应该是下面这个样子的
// int (*)[26]
int (*p)[26] = &arr;//本文结尾有关于int * p[26]写法的概述
而指向数组第一个元素的指针是下面这个样子的
// 这也是数组默认的情况,就是第一个元素的指针,arr指的就是这种情况
int * p=arr;
我为什么要说这些呢?因为我遇见了下面这个代码
int arr[26]={666,777};
int value=* * &arr;//value=666
可是如何解释呢??将他拆分成下面的代码,就很好解释了
int main(int a,char arg[]){int arr[26]={666,777};int (*p1)[26] = &arr;int * p2= * p1;int p3=*p2;printf("%d\n",p3);
}
所以切记,数组的指针,本质上不等于,数组第一个元素的指针
2.字面串数组与char数组
char arr[这里写不写长度都可以]="abc";
printf("%c\n",*arr);// 会打印出第一个元素
int arr[3]={'a','b','c'};
printf("%c\n",*arr);// 会打印出第一个元素
3.数组作为形参,则自动转化成指向首元素的指针
下面的代码function1和function2是完全相同的,以2为标准
void function1(char p []);
// 与下面完全等效
void function2(char * p);
笔记:int * p[26]
这种没有带小括号的,优先级顺序中括号>*,所以它的意思是p是一个长度26的数组,数组中的每个元素是一个int类型的指针
下一篇:指针的比较/指针加减
这篇关于C语言-数组的指针/数组指针/指向第一个元素的指针的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!