C语言基础收获篇目:#strlen() 的本质 ;strlen ()求字符串长度,为什么还可以通过数组的首元素地址求到数组中字符串的长度? #sizeof

今天听课的时候,发现了一个问题:

将数组名传给函数,函数这边接受的是数组首元素的地址。sizeof不会通过传过来的数组名而求得它的大小。但是strlen却可以用这个形参求出数组中的字符串长度

Tips:

1.sizeof是关键字也是操作符 ; 其操作数可以是 类型、变量、表达式

2.strlen -->求字符串长度的库函数 ,头文件 <string.h>

我是这样理解sizeof的:类型所占空间*数量。而在函数中,ch不再是数组,而仅仅是一个指针,是ch数组首元素的地址。对于指针,sizeof想要求指针的大小就得取决于电脑的位数:                     32位(X86)-->  4 Byte  ;  64位  -- > 8 Byte   

strlen () 可以求出字符串长度,可是为什么在函数中可以利用字符串数组首元素的地址,而求出这个字符数组的长度呢?

代码如下: 输出为"ghedcba"

#include<stdio.h>

void reverse(char ch[])
{
  int left = 0;
  int right = strlen(ch) -1 ; //为什么可以使用strlen?
  
  while(left<right)
   {   
      char tmp = ch [left]; 
      ch[left] = ch [left];
      ch[left] = tmp ;

       left ++ ;
       right --;
    }
}

int main()
{
  char ch[] = "abcdefg";
  reverse(ch);
  printf("%s\n",ch);

 return 0;
}

上面这个代码中,strlen给人的感觉就是 ,它顺着数组首元素地址找到了在函数外面的数组并且完成了它的任务;

对此,就产生了一个疑问:strlen工作的原理到底是什么?为什么在函数中,ch作为一个数组首元素指针,而strlen(ch); 还可以求出这个数组中字符串的长度?

strlen求字符串长度:

int ret = strlen("abcd"): //ret=4

也可以:

char ch = "abcd";
int ret = strlen(ch); //ret=4

然后......

也就是说,strlen通过这个ch指针去找到了这个原本的数组,也就是说strlen 执行的参数是指针

然后我去msdn 上查了一下strlen

emmm... 看来是指针了

再看一下msdn 给的例子:

又去尝试了一下...

看来!字符串传参和数组传参有点相似!都是传首元素地址过去;

那么,就可以说得通了,

strlen就是通过这个指针摸到原本的字符串数组(字符串)然后再去执行它的工作。

(PS.仅仅为初学者的思考,如若有误,请各位大佬一定要给小弟指出来!感谢)

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值