数组名的理解

1.引入

复制代码
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = &arr[0];

这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,⽽且是数组⾸元素的地址,我们来做个测试。

复制代码
#include <stdio.h>
int main()
{
 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
 printf("&arr[0] = %p\n", &arr[0]);
 printf("arr = %p\n", arr);
 return 0; }

我们发现数组名和数组⾸元素的地址打印出的结果⼀模⼀样,数组名就是数组⾸元素(第⼀个元素)的地址。

2.具体学习

我们接着来看下面一个代码:

复制代码
#include <stdio.h>
int main()
{
 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
 printf("%d\n", sizeof(arr));
 return 0; }

输出的结果是:40,如果arr是数组⾸元素的地址,那输出应该的应该是4/8才对。
其实数组名就是数组⾸元素(第⼀个元素)的地址是对的,但是有两个例外:
• sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,单位是字节
• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)
除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。

相关推荐
念恒1230621 小时前
进程概念(1)
linux·c语言
念恒123061 天前
进程概念(2)
linux·c语言
weixin_446023561 天前
C语言过时了?2026年C3和Zig谁能拯救它
c语言·zig·c3·系统级开发·语言革新
广州山泉婚姻1 天前
C语言循环结构精讲:底层认知与实用技巧
c语言·人工智能
handler011 天前
Linux: 基本指令知识点(3)
linux·服务器·c语言·开发语言·c++·笔记
wuminyu1 天前
专家视角看Java线程生命周期与上下文切换的本质
java·linux·c语言·jvm·c++
jgec21 天前
哈工大计算机系统2024大作业——Hello的程序人生
c语言·计算机系统
qeen871 天前
【算法笔记】前缀和经典题目解析
c语言·c++·笔记·学习·算法
三品吉他手会点灯1 天前
C语言学习笔记 - 2.C概述 - HelloWorld程序举例
c语言·笔记·学习
Felven1 天前
D. Zero Remainder Array
c语言