实习整理(八)

本文探讨了C/C++编程中涉及函数参数传递、字符串处理、数组与指针的关系以及内存管理的一些常见陷阱。通过实例解析了sizeof和strlen的区别,以及在数组、指针和字符串操作中的注意事项,包括静态库与动态库的链接规则。同时,介绍了在UNIX系统目录结构中的带链接树形目录结构,并讨论了哪些函数调用需要进入内核。
摘要由CSDN通过智能技术生成
部分题目的答案和解析参考网上的资料和师兄们的答案,不保证百分之百正确,如果有错误,希望各位“博友”积极指正。。。

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=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值