数组名a不是存放a[0]的地址吗?它难道没有自己的空间吗?为什么它的地址跟它保存的地址值是同一个?一个空间可以存两个不同类型的值?
数组名只是个逻辑而已,它相当于一个集合,或者向电脑里的文件夹。文件才是实实在在的东西,文件夹只是表示里面有一堆文件。
因为数组是一个连续的空间,第一个数组元素的存储位置就是数组的起始地址,那么将数组名也定义为数组的起始地址,能够方便数组的访问。
比如说字符这个东西,物理上也是不存在的,只是一个逻辑而已。内存里存储的都是二进制数,将char类型的某个数值范围表达为字符而已
在C语言中,数组名代表了数组的起始地址,因此在大多数情况下,数组名会被解释为指向数组第一个元素的指针。数组名不是一个普通的变量,它并没有自己的存储空间,而是指向数组中第一个元素的指针。
由于数组名是指向数组首元素的指针,所以数组名的值等于数组首元素的地址。因此,数组名的地址和数组首元素的地址是相同的。例如,对于一个整型数组a,a的地址等于&a[0],也等于指向a的指针变量的地址。这是因为数组名是指向数组首元素的指针,所以它保存的是数组首元素的地址。
一个空间通常只能存储一种类型的数据。在C语言中,可以通过类型转换来改变数据类型,但是这样做可能会导致数据丢失或不准确。因此,如果要在同一段空间中存储不同类型的数据,一般需要使用联合体(union)或结构体(struct)等特殊的数据类型来实现。