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

🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗

相关推荐
小仇学长41 分钟前
嵌入式八股文面试题(二)C语言算法
c语言·算法·八股文
因兹菜1 小时前
[LeetCode]day21 15.三数之和
数据结构·算法·leetcode
编程就是如此2 小时前
LeetCode Hot100(持续更新中)
算法·leetcode
萌の鱼3 小时前
leetcode 2466. 统计构造好字符串的方案数
数据结构·c++·算法·leetcode
Yolowuwu3 小时前
算法跟练第十一弹——二叉树
java·算法·leetcode
云边有个稻草人4 小时前
AI语言模型的技术之争:DeepSeek与ChatGPT的架构与训练揭秘
人工智能·算法·语言模型·chatgpt·deepseek
生信宝典4 小时前
机器学习算法 - 随机森林之决策树初探(1)
算法·随机森林·机器学习
计算机小白一个4 小时前
蓝桥杯 Java B 组之函数定义与递归入门
java·算法·职场和发展·蓝桥杯
iOS开发的小学生5 小时前
国密算法SM1、SM2、SM3和SM4 具体的使用和区别
算法·国密加密·sm1 sm2 sm3 sm4
CodeJourney.6 小时前
DeepSeek关联PPT使用教程
数据库·人工智能·算法