对一维数组的大小和地址的思考,及对数组使用sizeof和strlen函数的不同输出

本文通过实例探讨了一维数组的大小计算,讲解了sizeof和strlen函数在处理数组时的区别。强调了数组名表示首元素地址,以及在sizeof中的特殊表现。同时,介绍了字符数组的存储方式,包括strlen如何处理字符串结束符''。文章以深入理解数组和函数用法为目标,为后续的二维数组知识做铺垫。
摘要由CSDN通过智能技术生成

开始正题前我们先做个预备~

(全部C语言知识)    


数组的大小

数组的大小主要由数组的类型和数组元素的多少来决定。

如一个整型的数组

int arr[10] = {0};

这个数组共有十个元元素,都为整型,一个整型元素占用4个字节,那这个数组在内存中就占用40个字节。

数组的地址为数组首元素的地址即arr[0]的地址


sizeof和strlen

1.sizeof()是用来计算数组大小的,它一般用法如下

int arr[10] = {0};
int len = sizeof(arr)/sizeof(arr[0]);

len即为数组长度。

2.strlen( )是用来计算字符串长度的,括号内放入一个启始地址然后开始向后数,直到发现‘\0’.    '\0'并不计入长度。


真正的Boss来了!

前面真的都是铺垫,现在才是说重点了。

看代码前先记住两个情况(技巧)

1.数组名单独放在sizeof()内部,数组名表示整个数组

所以sizeof(数组名)计算的是整个数组的大小,单位是字节

2.&数组名,数组名表示整个数组

所以&数组名取出的是整个数组的地址

---------除此之外,所有的数组名都表示首元素的地址


那么请看代码

int a[] = {1,2,3,4};

printf("%d\n",sizeof(a));          //16
printf("%d\n",sizeof(a+0));        //4
printf("%d\n",sizeof(*a));         //4
printf("%d\n",sizeof(a+1));        //4
printf("%d\n",sizeof(a[1]));       //4
printf("%d\n",sizeof(&a));         //4  //16-err
printf("%d\n",sizeof(*&a));        //16
printf("%d\n",sizeof(&a+1));       //4
printf("%d\n",sizeof(&a[0]));      //4
printf("%d\n",sizeof(&a[0]+1));    //4

思考这些代码的执行结果,后面已注释出答案;

不懂请看解释--解释:

第1行 为定理一情况,数组名单独放内部表示整个数组࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值