打印数组&&数组名&&字符串大小计算

1.打印数组

char arr[] = {'a','b','c','d'};
printf("%s\n",arr);//%s打印字符串,%c打印单个字符
char arr[] = {'a','b','c','d','\0'};
printf("%s\n",arr);
char arr[] = "abcd";
printf("%s\n",arr);

在使用%s打印字符串时,遇到’\0’打印才会结束。与第二种、第三种情况相比,第一种情况种无’\0’,所以计算机会在打印完abcd后接着打印,直到遇到’\0’,才会结束打印
‘\0’是不可显示字符,%c、%s无法打印出来,但是可以通过ASCII码(%d)来打印字符’\0‘

在这里插入图片描述
2.数组名是什么?

int arr[] = {0,1,2,3,4,5,6,7,8,9};
printf("%p\n",arr);
printf("%p\n",&arr[0]);
printf("%p\n",&arr);
printf("%p\n",arr+1);
printf("%p\n",&arr[0]+1);
printf("%p\n",&arr+1);

arr与&arr[0]表示首元素地址,
故arr+1与&arr[0]+1均表示由首元素地址变为第二个元素的地址
在32位环境下,首元素地址+4,得到第二个元素地址

&arr表示的是数组的地址,但打印出来的仍是首元素地址!
其&arr+1表示跳过整个数组大小,
在32位环境下,首元素地址 +(4×10),跳过整个数组

十六进制:90(十进制:144)-十六进制:8C(十进制:140)= 4
十六进制:B4(十进制:180)-十六进制:8C(十进制:140)= 40
在这里插入图片描述
3.运算符sizeof()与函数strlen()

char arr[] = "abcd";
printf("%d\n",sizeof(arr)/sizeof(arr[0]));
printf("%d\n",strlen(arr));
char arr[] = {'a','b','c','d'};
printf("%d\n",sizeof(arr)/sizeof(arr[0]));
printf("%d\n",strlen(arr));
char arr[] = {'a','b','c','d','\0'};
printf("%d\n",sizeof(arr)/sizeof(arr[0]));
printf("%d\n",strlen(arr));

sizeof()是用来求内存所占空间大小的,会计入’\0’。sizeof(arr):整个数组大小除以sizeof(arr[0]):一个字符大小,得到字符串长度
strlen()函数是通过结束标识符’\0’来计算字符串长度的,但计算出来的字符串长度不包括’\0’
第一种情况:sizeof()/sizeof()会将’\0’算入; strlen()不会将’\0’算入
第二种情况:数组中没有结束标识符’\0’,sizeof()在没有结束标识符的情况下,仍可以计算; 当没有结束标识符时,函数strlen() 计算出来的结果是一个随机值
第三种情况:同第一种情况

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值