一维数组时指针和数组分析

#include<stdio.h>
int main()
{
	int a[] = { 1,2,3,4 };

	printf("%d\n", sizeof(a));//16个字节
	//a作为数组名单独放在sizeof内部,计算的是数组的总大小,单位是字节

	printf("%d\n", sizeof(a + 0));//4个字节/8个字节
	//a并非单独放在sizeof内部,也没有&,所以a+0就是数组首元素地址,是地址就是4/8个字节

	printf("%d\n", sizeof(*a));//4个字节
	//a是首元素地址,*a就是首元素,sizeof(*a)就算的是首元素的大小

	printf("%d\n", sizeof(a + 1));//4个字节/8个字节
	//a是首元素地址,a+1就是整型指针+1,也就是跳过一个整型,所以a+1是第二个元素的地址
	//所以sizeof(a+1)就是计算指针的大小

	printf("%d\n", sizeof(a[1]));//4个字节
	//a[1]是数组的第二个元素,sizeof(a[1])的大小 - 4个字节

	printf("%d\n", sizeof(&a));//4个字节/8个字节
	//&a取出的是数组的地址,整个数组的地址也是地址,sizeof(&a)就是4/8个字节
	//区别:  a - int*
	//       &a - int (*)[4]

	printf("%d\n", sizeof(*&a));//16个字节
	//指针类型不仅影响+1-1的步长,也影响指针解引用时访问得到的结果,对数组指针解引用访问数组。
	//&a是数组的地址,是数组指针类型,*&a是对于数组指针解引用,访问一个数组

	printf("%d\n", sizeof(&a + 1));//4个字节/8个字节
	//&a+1跳过一个数组,还是地址,是4/8个字节

	printf("%d\n", sizeof(&a[0]));//4/8个字节
	//&a[0]是第一个元素的地址

	printf("%d\n", sizeof(&a[0] + 1));
	//&a[0]+1是第一个元素的地址,&a[0]+1就是第二个元素的地址
	//&a[0]+1  --  int*      &a[0]+1  ==  &a[1]

	return 0;
}

关于数组名:
数组名是数组首元素地址
但是有两个类外:
1.sizeof(数组名)  --  数组名也表示整个数组,数组单独放在(),计算的是整个数组的大小,单位是字节
2.&数组名, --  数组名也表示整个数组,取出的是整个数组的地址
//除了这2个类外,见到的所有数组名都是首元素地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值