数组名都是表示首元素地址吗?

该程序示例展示了在C语言中一维和二维数组的地址表示以及sizeof运算符的应用。数组名代表首元素地址,但使用&运算符和sizeof运算符时有所不同。&数组给出整个数组的地址,sizeof(数组名)计算整个数组的字节数。对于二维数组,可以按行或列计算其尺寸。
摘要由CSDN通过智能技术生成

首先看一维数组

#include <stdio.h>

//数组名确实能表示首元素的地址
//但有两个例外
//1.&数组,这里的数组表示整个数组,取出的是整个数组的地址,也是用首元素地址来表示的。
//2. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。

int main() {
	int arr[10] = { 0 };
	printf("%p\n",arr);//数组首元素的地址
	printf("%p\n",arr+1);//表示下一个元素的地址,int是四个字节,所以是首元素地址+4
	printf("%p\n", &arr[0]);//数组首元素的地址
	printf("%p\n", &arr[0]+1);//表示下一个元素的地址,int是四个字节,所以是首元素地址+4
	printf("%p\n", &arr);//整个数组的地址
	printf("%p\n", &arr+1);//表示下一个数组的地址,整个数组是10*4个字节,所以是首元素地址+40(0x28)

	printf("*******************\n");
	printf("%d\n", sizeof(arr));

	return 0;
}

在这里插入图片描述

接着看二维数组

#include <stdio.h>

//数组名确实能表示首元素的地址
//但有两个例外
//1.&数组,这里的数组表示整个数组,取出的是整个数组的地址,也是用首元素地址来表示的。
//2. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。

int main() {
	printf("*******  一维数组  ******\n");
	int arr[10] = { 0 };
	printf("%p\n",arr);//数组首元素的地址
	printf("%p\n",arr+1);//表示下一个元素的地址,int是四个字节,所以是首元素地址+4
	printf("%p\n", &arr[0]);//数组首元素的地址
	printf("%p\n", &arr[0]+1);//表示下一个元素的地址,int是四个字节,所以是首元素地址+4
	printf("%p\n", &arr);//整个数组的地址
	printf("%p\n", &arr+1);//表示下一个数组的地址,整个数组是10*4个字节,所以是首元素地址+40(0x28)

	printf("*****  计算一维数组的长度  ********\n");
	printf("%d\n", sizeof(arr));//整个数组的长度,元素个数*字节数 10*4=40
	printf("%d\n", sizeof(arr)/sizeof(arr[0])); // 10

	printf("*******  二维数组  ******\n");
	int erwei[3][4] = { 0 };
	//把二维当做一维去看待,erwei里面有3个元素。这3个元素都是包含4个元素的数组
	printf("%p\n", erwei);//数组首元素的地址
	printf("%p\n", erwei + 1);//表示下一个元素的地址,下一个元素是4个元素的数组,是4*4=16个字节,所以是首元素地址+16

	printf("*****  计算二维数组的长度  ********\n");
	printf("%d\n", sizeof(erwei));//整个数组的长度,元素个数*字节数 12*4=48

	//计算二维数组的行数
	printf("行数:%d\n", sizeof(erwei) / sizeof(erwei[0]));   //  (12*4)/(4*4) = 3

	//计算二维数组的列数
	printf("列数:%d\n",sizeof(erwei[0])/sizeof(erwei[0][0]));  //  (4*4)/4 = 4

	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值