标题问题:
在c语言 数组名代表什么?以及数组名在哪个区存放,数组空间在哪开辟?
先给结论 :
补充:
指针常量:char * const arr; 指针指向的值可以改变,指针的指向不可以改变。
常量指针:char const *arr; 指针的指向可以改变,指针指向的值不可以改变。
区分:从前往后读 ,先读到*是指针常量,先读到const是常量指针。
eg:
char arr[10] = "abcde";
arr = "cdefg" ; //errro 指针的指向不可以改变
*arr = ‘b’ ; // right 指针指向的值可以改变 数组名代表数组首元素地址。
在ubuntu环境下c语言中 数组名本质是指针常量,代表首元素地址。数组首元素地址和数组首地址有着相同的地址编号。
数组名存放在哪里,数组空间在哪开辟,看它定义的时候是局部变量还是全局变量,有没有malloc函数在堆区空间开辟空间。
简单探究:
1)比较 数组名首元素地址与数组首地址 (array 与 &array)
探究数组名 代表的首元素地址编号 和对数组名取地址 代表的数组首地址。
void test01()
{
int array[5] = {1,2,3,4,5};
int i=0;
while(i<5)
{
printf("%d\n",array[i]);
i++;
}
printf("array=%d\n",array);
printf("array=%p\n",array);
printf("array=%#x\n",array);
printf("------------------------\n");
printf("array=%d\n",array);
printf("array=%p\n",array);
printf("array=%#x\n",array);
}
运行结果:

数组名 代表的首元素的地址 和 对数组名取地址的首地址 在地址编号上相同。
2)用sizeof()看数组首元素地址 和数组首地址
printf("sizeof(&array)=%lu\n",sizeof(&array)); //数组首地址 测量数组地址的大小 === 8字节
printf("sizeof(array)=%lu\n",sizeof(array)); // 数组首元素地址 测量的是整个数组所占的空间大小
结果为:

数组名首地址为8字节,仅仅代表了数组的地址,对数组名取sizeof测量的是 数组名所代表的连续空间大小
3)数组名是常量指针。不能在等号左边。
等价于 int *const array[ ] 不能被修改指针的指向,可以修改指针内地址所代表的空间内容。
具有常量的特征无法被赋值,不能在等号左边。若数组名可以被赋值,那开辟数组的数组空间,如果在只有数组的地址没有被其他指针保存。数组名被赋值,则数组所开辟的空间会丢失,发生内存泄漏。
1】数组名(常量指针)在等号右边 ,给等号左边赋值
void test01()
{
int array[5] = {1,2,3,4,5};
int i=0;
while(i<5)
{
printf("%d\n",array[i]);
i++;
}
printf("-----------------\n");
int *p=array;
i--;
while(i>=0)
{
printf("%d\n",p[i]);
i--;
}
// int array2[5];
}

2】数组名(常量指针)在等号左边
void test01()
{
int array[5] = {1,2,3,4,5};
int i=0;
while(i<5)
{
printf("%d\n",array[i]);
i++;
}
printf("-----------------\n");
int *p=array;
int array2[5];
array2 = p;
}
结果:

expression must be a modifiable lvalue --》表达式(expression)必须是一个可修改(modifiable)的左值(lvalue)。
4)数组指针可以在等号左边 (数组指针是指针变量,而不是数组)
#include <stdio.h>
int main()
{
char array[] = "abcde"; //双引号里面字符串会自动补 '\0'
char (*array3)[6] = &array;
printf("array3=%s\n",*array3);
return 0;
}
结果为 
补充:
严谨的角度来看,数组名是常量指针,(符号常量)数组名指向一段数组开辟连续空间。

文章详细探讨了C语言中数组名的含义,指出数组名实际上是一个指针常量,代表数组首元素的地址,且不可改变。通过示例代码解释了数组名与首元素地址的关系,以及`sizeof`运算符在数组和指针上的应用。同时,强调了数组名作为常量指针的特性,不能在赋值运算符的左侧使用。最后,文章提到了数组指针的使用和其与数组名的区别。





