首页 > 试题广场 >

下⾯函数的功能是() int fun (char *s

[单选题]
下⾯函数的功能是()
int fun (char *s) {
    char *p = s;
    while(*p++);
    return p-s-1;
}


  • 计算字符串的位(bit)数
  • 复制⼀个字符串
  • 求字符串的长度
  • 求字符串存放的位置
有没有大神解读一下为什么呀?
发表于 2021-12-19 11:42:10 回复(0)
只有当两个指针都指向同一个数组中的元素时,才允许从一个指针减去另一个指针。
减法运算的值是两个指针在内存中的距离(以数组元素的长度为单位,而不是以字节为单位),因为减法运算的结果将除以数组元素类型的长度
发表于 2022-03-17 19:24:05 回复(0)
传递进去一个char类型的指针 使用一个char类型的指针p接受
while(*p++)
当*p==‘\0’的时候while循环停止 
两个指针相减得到它们元素的个数
而使用‘\0’减去起始位置之后实际上还多了1 
所以要减去1
发表于 2022-10-02 10:24:39 回复(0)
int fun(char *s) {
    char *p = s;
    while (*p != '\0') {
        p++;
    }
    return p - s;
}
谁他妈去查优先级

发表于 2022-02-23 16:01:51 回复(1)
函数接受一个从主函数传过来的地址(该地址存储char类型变量),地址存储在指针s中,声明指针p并初始化(指针p中也存放着主函数中char变量的地址),接着做循环,返回主函数
发表于 2023-08-19 10:03:19 回复(0)
*p++有点坑,还要看*和++的优先级
发表于 2023-03-06 14:13:10 回复(0)
解析如下

原代码等价于:
int fun (char *s) {
    char *p = s;
    while(*p) //p所指字符ASCII码不为0,即不是结束符'\0'
        p++;//p指向下一个字符
    p++;
    return p-s-1;//s指向首字符,p指向结束符'\0'的下一个字符,则p-s-1为字符串长度
}

编辑于 2022-03-12 20:59:41 回复(1)
string库,strlen函数的标准写法就是这样
发表于 2023-05-27 12:47:15 回复(0)
哪位大神可以帮忙写个详细一点的解析么😔
发表于 2022-01-16 20:09:03 回复(0)
p是第二行字符的首地址,s是第一行字符的首地址,再减去个\0,,但是字符串不是存储在常量区吗
发表于 2021-12-25 16:20:45 回复(0)
地址减去s的和最后加的一个0的
发表于 2021-07-15 21:50:47 回复(0)
C
发表于 2020-12-26 10:06:12 回复(0)