c语言中数组名和对数组名取地址一样吗?
c语言中数组名和对数组名取地址一样吗? 数组名
[解决办法]
地址值是一样,在内存中位置也一样,但是意思不一样。数组名代表数组中第一个元素的地址,数组名取地址代表整个数组的地址。如果对前者加1则是数组中第二个元素的地址,如果对后者加1则是整个数组之后位置的地址。
[解决办法]
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
[解决办法]
一个是首地址(第一个元素的地址)。
一个是数组地址,类型不同,值相同。
一维数组,取地址,得到一维数组指针。
指针长度(指针加一后,移动的距离)是整个数组长度。
一维数组,数组名做值参以及参与运算,
甚至单独出现,代表数组第一个元素的地址---首地址 ,是一级指针。
指针长度(指针加一后,移动的距离)是数组的一个元素的长度。
二维数组,取地址,得到二维数组指针。
指针长度(指针加一后,移动的距离)是二维数组的长度。
二维数组,数组名做值参以及参与运算,甚至单独出现,代表数组第一个元素的地址---第一个一维数组元素的地址 ,是一维数组指针。
指针长度(指针加一后,移动的距离)是一维数组的长度。
[解决办法]
数组名含义根据不同的场景是变化的,楼主应当灵活掌握:
比如对 char s[4] = "chi";
除了以下这二种例外情况,数组名一律退化为"指向数组首元素的指针".
(1) sizeof(s)
(2) &s;
到于&s,虽然他的值和s一样,但类型不一样。
char s[4] = "chi"
char (*p)=&s; //注意&s的类型。
char *ps=s; //注意除了上面讲的那两种情况,数组名一律退化为"指向数组首元素的指针"