今天看到了一道很有意思的题,就想给大家分享分享,顺便说一下sizeof与strlen的区别。请接着往下看:
int fun(char* s){
char* t = s;
while(*t++);
return t-s;
}
fun函数的功能是_______
A.比较两个字符串的大小
B.计算s所指字符串占用内存的大小
C.计算s所指字符串的长度
D.将s所指字符串复制到字符串t中
这道题的答案书选C,为什么选C呢,首先函数是int类型的,所以返回的是一个整型的数据。因为*t++中*号与后加加(++)的符号优先级是一样的,所以我们其实可以拆分为*(t++)或者*t和t++,这样是不是就很清晰了,*t和t++两个表达式要不就都运行,要不就都不运行。当执行到最后一个 \0 时,while中的t还做了一次++操作,而此时s依然指向字符串开头(因为s一开始就没改变过,只有t在进行++操作),所以t指向字符串\0的后一个位置,两者相减等于strlen(s)+1,也就是sizeof(s);所以最后的结果是字符串的长度。
源代码如下:
#include "stdafx.h"
#include<string>
int fun(char* s) {
char* t = s;
while (*t&#