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

🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗

相关推荐
2301_7644413314 分钟前
三维建筑非法入侵情景推演
python·学习·算法
唯道行27 分钟前
计算机图形学·19 Shadings in OpenGL
人工智能·算法·计算机视觉·几何学·计算机图形学·opengl
初夏睡觉1 小时前
全排列题解
算法·深度优先·图论
奔跑吧邓邓子1 小时前
【C语言实战(72)】C语言文件系统实战:解锁目录与磁盘IO的奥秘
c语言·文件系统·目录·开发实战·磁盘io
在下赵某人1 小时前
概率数据结构的设计原理与误差分析
数据结构·算法·哈希算法
CoderYanger1 小时前
递归、搜索与回溯-综合练习:19.目标和
java·算法·leetcode·1024程序员节
mit6.8241 小时前
dfs|mask^翻转
算法
SKYDROID云卓小助手2 小时前
三轴云台之控制协同技术
服务器·网络·图像处理·人工智能·算法
The Last.H2 小时前
Educational Codeforces Round 185 (Rated for Div. 2)A-C
c语言·c++·算法
fengfuyao9852 小时前
匈牙利算法的MATLAB实现
java·算法·matlab