C语言中的三值合一

在学习C语言中我们会发现这样一种情况:

#include<stdio.h>

Int main()

{

    Int ar[10];

    printf(“%p\n”,ar);

    printf(“%p\n”,&ar);

    Printf(“%p\n”,&ar[0]);

}

    运行上面这一段代码之后发现:三个运行结果都是一样的。对于以上的现象我把它称为C语言的三值合一。

   虽然运行结果是一样的,但是其本质是不同的:

ar访问的是数组名的值,而这个值恰好是首元素的地址

&ar[0]对数组的首元素求地址

&ar是求整个数组空间的的地址(恰好是首元素的地址)

   数组名ar代表的是整个数组,它的值恰好是首元素的地址,当用sizeof(ar)求其大小时,可以得出sizeof(ar)=40.

   &ar[0]则指明求数组中首元素的地址。

   &ar则是对整个数组空间求地址,它的地址恰好就是首元素的地址。

   我们经常听到说&ar,ar就是首元素的地址,这种说法是不正确的,它只能说明他们的值与首元素一样,但并不首元素的地址。相信经过以上的讲解,我们能够清楚地分辨他们。

posted @ 2016-07-17 16:58  请叫我小小兽  阅读(265)  评论(0编辑  收藏  举报