C语言进阶习题【1】指针和数组(1)——一维数组

1. 数组名的意义:

  1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
  2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
  3. 除此之外所有的数组名都表示首元素的地址。(一维数组和二维数组的数组名的值都是首元素的地址,但是意义不同,一维数组名+1,跳过第一个元素二维数组名+1,跳过第一行元素。

2. 一维数组练习总(sizeof)

&a 和a的区别
a指的是数组首元素的地址+1会跳过第一个元素,到下一个元素,
&a指的是整个数组,值也是数组首元素地址,但是+1会跳过整个数组,

#include<stdio.h>

int main()
{

	//一维数组
	int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));  // 这个a单独放在sizeof中表示整个数组的大小, int型 一个数据4字节,四个数据16个字节
	printf("%d\n", sizeof(a + 0)); //这个a没有单独放入,表示首元素的地址,首元素+0还是首元素,首元素的大小 4字节/32位机器  8字节/64位机器
	printf("%d\n", sizeof(*a));//a表示首元素地址,解引用还是首元素,大小 4字节
	printf("%d\n", sizeof(a + 1));//a表示首元素地址,+1表示第二个元素,大小4字节/32位机器  8字节/64位机器
	printf("%d\n", sizeof(a[1])); //a[1]表示第二个元素,大小4字节
	printf("%d\n", sizeof(&a));//&a表示整个数组的地址,整个数组地址也是地址,4字节/32位机器  8字节/64位机器
	printf("%d\n", sizeof(*&a)); //&a是数组的地址,*&a就是拿到了数组,*&a--> a,a就是数组名,sizeof(*&a)<-等价->sizeof(a)  可以理解*&这俩抵消了sizeof(a)->表示整个数组,大小16字节   
	printf("%d\n", sizeof(&a + 1));//&a表示整个数组,+1是跳过整个数组,这个指针类型是我们的int(*a)[4],是一个数组指针,是指针的话,就是4字节/32位机器  8字节/64位机器
	printf("%d\n", sizeof(&a[0]));//对第一个元素取地址,地址的话就是4字节/32位机器  8字节/64位机器
	printf("%d\n", sizeof(&a[0] + 1));//第一个元素取地址再加1 就是第二个元素地址 ,地址的话就是 4字节/32位机器  8字节/64位机器


	return 0;
}

在这里插入图片描述

3 分析1

	printf("%d\n", sizeof(a));  // 这个a单独放在sizeof中表示整个数组的大小, int型 一个数据4字节,四个数据16个字节
	printf("%d\n", sizeof(a + 0)); //这个a没有单独放入,表示首元素的地址,首元素+0还是首元素,首元素的大小 4字节/32位机器  8字节/64位机器
	printf("%d\n", sizeof(*a));//a表示首元素地址,解引用还是首元素,大小 4字节
	printf("%d\n", sizeof(a + 1));//a表示首元素地址,+1表示第二个元素,大小4字节/32位机器  8字节/64位机器
	printf("%d\n", sizeof(a[1])); //a[1]表示第二个元素,大小4字节

在这里插入图片描述

在这里插入图片描述

4. 分析2

	printf("%d\n", sizeof(&a));//&a表示整个数组的地址,整个数组地址也是地址,4字节/32位机器  8字节/64位机器
	printf("%d\n", sizeof(*&a)); //&a是数组的地址,*&a就是拿到了数组,*&a--> a,a就是数组名,sizeof(*&a)<-等价->sizeof(a)  可以理解*&这俩抵消了sizeof(a)->表示整个数组,大小16字节   
	printf("%d\n", sizeof(&a + 1));//&a表示整个数组,+1是跳过整个数组,这个指针类型是我们的int(*a)[4],是一个数组指针,是指针的话,就是4字节/32位机器  8字节/64位机器

在这里插入图片描述

5. 分析3

printf("%d\n", sizeof(&a[0]));//对第一个元素取地址,地址的话就是4字节/32位机器  8字节/64位机器
	printf("%d\n", sizeof(&a[0] + 1));//第一个元素取地址再加1 就是第二个元素地址 ,地址的话就是 4字节/32位机器  8字节/64位机器

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值