您的位置:首页 > 运维架构 > Linux

2017linux面试题整理

2017-05-27 11:07 375 查看
1、关于int和char转换问题

#include<stdio.h>

#include<string.h>

int main()

{

    char str[512];

    int i;

    for(i=0;i<512;i++)

        str[i]=-1-i;

    printf("%d\n",strlen(str));

    return 0;

}

解释:

因为在str的时候-1和是整数,默认按32位走,左边高地址,右边低地址

因为char只会读取一字节,只会读一字节

-1-0补码 1111 1111 1111 1111 1111 1111 1111 1111-0000 0000 0000 0000 0000 0000 0000 0000

结果str[0]=(补码1111 1111)-1

-1-255的时候,补码1111 1111 1111 1111 1111 1111 1111 1111-0000 0000 0000 0000 1111 1111

结果str[255]=(补码0000 0000)为0,因为存进char类型,所以变为‘\0'结束符号,所以最后strlen结果为255

2、关于二维数组问题

#include<stdio.h>

int main()

{

    int nums[5]={2,4,6,8,10};

    int *ptr=(int *)(&nums+1);

    printf("%d,%d\n",*(nums+1),*(ptr-1));

    return 0;

}

结果 4,10

&nums是代表整个数组的地址,所以进阶单位是整个数组长度

&nums+1就到达了10后面的一个位置

当*ptr=nums+1只是nums向后移动一个单位到达nums[1]

注意:&nums类型是int(*)[5]类型,要强制转换一下才可以

 int *ptr=(&nums+1)不用强制转换的时候仍然代表一个的是10后面的一个位置,但是最后结果时ptr-1是按照int的字节减去,所以此时进阶单位不是一个数组长度

3、返回函数指针的函数

#include<stdio.h>

#include<string.h>

    size_t q(size_t b)

    {

        return b;

    }

    size_t(*p(char *str))(size_t a)//返回函数指针的函数

    {

        printf("%s\n",str);

        return q;//*q就是变成了q(size_t b)来计算

    }

int main()

{

    char str[]="xiyoulinuxgroup";

    printf("%d",p(str)(strlen(str)));

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: