c语言——数组名该如何理解呢?

一般情况下,数组名表示首元素地址,以下2种除外:

①、sizeof(数组名) 表示整个数组只有数组名的情况

sizeof(数组名+i) 就不能表示整个数组

②、&数组名 表示整个数组,取的是整个数组的地址

cpp 复制代码
int main()
{
	int arr[] = { 1,2,3,4,5 };

	int n = sizeof(arr);//整个数组
	int m = sizeof(arr + 1);//首元素地址+1,下一个元素地址,仅一个元素

	printf("%d\n", n);
	printf("%d\n\n", m);

	printf("%p\n", arr);//首元素地址
	printf("%p\n", arr + 1);//首元素往后一位的地址
	printf("%p\n", &arr[0]);//首元素地址
	printf("%p\n", &arr[0]+1);//首元素往后一位地址
	printf("%p\n", &arr);//全部元素的地址,只是只打印了首元素的
	printf("%p\n", &arr+1);//跳过整个数组后的第一个元素的地址


	return 0;
}

结果是:

20

4

00AFFE58

00AFFE5C

00AFFE58

00AFFE5C

00AFFE58

00AFFE6C

sizeof是计算()占了多少字节(byte)

可以看出,&arr 取的是整个数组的地址,怎么存放这么多地址呢?

数组指针 呀~

int (*p)[5]=&arr;

p和*先结合,表示p是指针,然后再结合[5]和int 表示是int[5]类型的

指针配合数组

打印结果是多少呢?

解释如下 👇

cpp 复制代码
{
	int a[] = { 1,2,3,4 };

	printf("%d\n", sizeof(a));
	//16,整个数组的大小
	printf("%d\n", sizeof(a+0));
	//4或8 首元素地址
	printf("%d\n", sizeof(*a));
	//4 a是首元素地址,解引用找到首元素
	printf("%d\n", sizeof(a+1));
	//4或8 第二个元素的地址
	printf("%d\n", sizeof(a[1]));
	//4 第二个元素
	printf("%d\n", sizeof(&a));
	//【4或8】 &a是整个数组的地址,也是个地址
	//可以理解为,数组指针是4或8,它俩大小一样
	printf("%d\n", sizeof(*&a));
	//16 整个数组  &a是整个数组的地址,解引用后,是整个数组
	//printf("%d\n", sizeof(&a+1));
	//【4或8】 也是个地址,跳过整个数组
	printf("%d\n", sizeof(&a[0]));
	//4或8 首元素地址
	printf("%d\n", sizeof(&a[0]+1));
	//4或8 第二个元素地址

	return 0;
}

🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗

相关推荐
一只鱼^_38 分钟前
牛客练习赛138(首篇万字题解???)
数据结构·c++·算法·贪心算法·动态规划·广度优先·图搜索算法
一只码代码的章鱼1 小时前
Spring的 @Validate注解详细分析
前端·spring boot·算法
邹诗钰-电子信息工程1 小时前
嵌入式自学第二十一天(5.14)
java·开发语言·算法
小_楠_天_问1 小时前
第二课:ESP32 使用 PWM 渐变控制——实现模拟呼吸灯或音调变化
c语言·嵌入式硬件·mcu·esp32·arduino·pwm·esp32-s3
↣life♚2 小时前
从SAM看交互式分割与可提示分割的区别与联系:Interactive Segmentation & Promptable Segmentation
人工智能·深度学习·算法·sam·分割·交互式分割
zqh176736464692 小时前
2025年阿里云ACP人工智能高级工程师认证模拟试题(附答案解析)
人工智能·算法·阿里云·人工智能工程师·阿里云acp·阿里云认证·acp人工智能
秋山落叶万岭花开ღ2 小时前
C语言顺序表应用详解:从理论到实践
c语言
2301_803554522 小时前
c++和c的不同
java·c语言·c++
fie88892 小时前
用模型预测控制算法实现对电机位置控制仿真
算法
Kent_J_Truman2 小时前
【交互 / 差分约束】
算法