题目

字符串长度函数1

34题的区别在于一个”t–“,因此答案也就有了区别:“字符串的长度”,“字符串s的长度”

一个字符串变量:s[10]=”abcde”

“字符串的长度”指这个字符串变量的长度

“字符串s的长度”指“abcde”的长度

是一个文字游戏

字符串长度函数2


不过既然两道题都选错了我们从头开始理解

首先涉及知识点:

  • while语句

    字符串长度函数2

    在本题中,statement部分仅仅为一个分号(这种语句也叫空语句),return语句就与循环无关了

  • 字符串的相关知识

    • 地址

      字符串长度函数4

      在本题中,s,t均为地址变量

    • 取地址内容 *

      符号*代表从所给地址取出所对应的内容

    • 结束字符

      字符串长度函数5

      在本题中,就是用了这样的特性
      
      s+5所存储的内容的值为0(注意是内容的值)
      
      在本题中,t的值一直从aa自增到aa+5,此时内容的值为0,while(0),循环结束,t=aa+6
      
    • 自增运算符运算符的优先级和结合性

      ++是自增运算符,是单目运算符,其作用是使单个变量的值增1。它有两种使用情况: 1)前置:++i,先执行i=i+1,再使用i值; 2)后置:i++,先使用i值,再执行i=i+1。 例如: j=3; k=++j; 执行“k=++j”语句后,k=4,j=4。上述语句等效为: j=3; j=j+1; k=j; 再如: j=3; k=j++; 执行“k=j++”语句后,k=3,j=4。上述语句等效为: j=3; k=j; j=j+1;

      优先级 运算符 名称或含义 使用形式 结合方向 说明
      1 [] 数组下标 数组名[常量表达式] 左到右  
      () 圆括号 (表达式)/函数名(形参表)      
      . 成员选择(对象) 对象.成员名      
      -> 成员选择(指针) 对象指针->成员名      
      2 - 负号运算符 -常量 右到左 单目运算符
      (类型) 强制类型转换 (数据类型)表达式      
      ++ 自增运算符 ++变量名/变量名++ 单目运算符    
      自减运算符 –变量名/变量名– 单目运算符    
      * 取值运算符 *指针变量 单目运算符    
      & 取地址运算符 &变量名 单目运算符    
      ! 逻辑非运算符 !表达式 单目运算符    
      ~ 按位取反运算符 ~表达式 单目运算符    
      sizeof 长度运算符 sizeof(表达式)      

      字符串长度函数6

      ​ 虽然你注意到了(给++加了个小括号)++与*同优先级,但从结合性上看先算++,但是忽略了++的特性,i++的返回值是i

      ​ 在本题中,当while(0)发生时,t++给while的结果是s+5,但当while执行完后t变为了s+6

  • 函数定义,函数参数传递,地址变量定义在此不做赘述(困了)

  • 还有啥疑问白天再说吧