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 表示是int5类型的

指针配合数组

打印结果是多少呢?

解释如下 👇

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;
}

🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗

相关推荐
一只齐刘海的猫27 分钟前
【Leetcode】找到字符串中所有字母异位词
算法·leetcode·职场和发展
海清河晏1111 小时前
数据结构 | 八大排序
数据结构·算法·排序算法
AI科技星1 小时前
数术工坊第八卷:算力革命
c语言·开发语言·网络·量子计算·agi
IronMurphy2 小时前
【算法五十七】146. LRU 缓存
算法·缓存
凌波粒2 小时前
LeetCode--108.将有序数组转换为二叉搜索树(二叉树)
算法·leetcode·职场和发展
liulilittle2 小时前
KCC:在 BBR 思路上的一次探索
网络·tcp/ip·算法·bbr·通信·拥塞控制·kcc
浦信仿真大讲堂3 小时前
达索系统SIMULIA Abaqus 2026接触和约束的增强新功能介绍
人工智能·python·算法·仿真软件·达索软件
点云侠3 小时前
PCL 生成三棱锥点云
c++·算法·最小二乘法
兰令水3 小时前
leecodecode【面试150】【2026.6.13打卡-java版本】
java·算法·leetcode
临沂堇3 小时前
刷题日志 | Leetcode Hot 100 哈希
算法·leetcode·哈希算法