部分题目的答案和解析参考网上的资料和师兄们的答案,不保证百分之百正确,如果有错误,希望各位“博友”积极指正。。。
1.void func(char str[50])
{
printf("A %d B %d ",sizeof(str),strlen(str));
//因为传递的是指针,所以str的sizeof结果为4(假设为32位系统),因为str是由strb传递过来的,所以str也指向字符'e'所在的内存单元,因此其字符长度为'elloWorld'的个数
}
int main(void)
{
char stra[]="HelloWorld";
char *strb=stra;
printf("C %d D %d ",sizeof(stra),sizeof(strb++));
//stra为字符数组名,求其sizeof时应为字符个数加1(加1是因为字符数组以'\0'结尾),strb为指针,求其sizeof则为地址位数,若为32位系统,则sizeof的结果为4,若为64位系统,则结果为8
func(++strb);
//strb原来指向字符'H'所在的内存单元,现在进行了++strb操作后指向了字符'e'所在的内存单元,且传递的是指针,即地址
printf("E %d F %d ",strlen(stra),strlen(strb++));
//stra仍指向字符'H'所在的内存单元,因此其strlen为'HelloWorld'的长度,strlen(strb++)先计算strb所指向的字符串长度,之后strb再自增,因此其结果仍为'elloWorld'的字符个数
return 0;
}
PS:这道题要注意的是strlen求得是字符个数,不用算上结束符'\0',sizeof便要算上结束符'\0'所占的字节
此外,数组若作为参数传递,则其便会退化为指针
2. std::string name1="youku";
const char * name2=