一些經典的面試題

1、sizeof和strlen有哪些區別?
1.sizeof操作符的結果類型是size_t,它在頭文件中typedef爲unsigned int類型。
該類型保證能容納實現所建立的最大對象的字節大小。
2.sizeof是算符,strlen是函數。
3.sizeof可以用類型做參數,strlen只能用char*做參數,且必須是以”\0”結尾的。
4.數組做sizeof的參數不退化,傳遞給strlen就退化爲指針了。
5.大部分編譯程序 在編譯的時候就把sizeof計算過了 是類型或是變量的長度這就是sizeof(x)可以用來定義數組維數的原因
6.strlen的結果要在運行的時候才能計算出來,時用來計算字符串的長度,不是類型佔內存的大小。
7.sizeof後如果是類型必須加括弧,如果是變量名可以不加括弧。這是因爲sizeof是個操作符不是個函數。
8.當適用了於一個結構類型時或變量, sizeof 返回實際的大小,
當適用一靜態地空間數組, sizeof 歸還全部數組的尺寸。
sizeof 操作符不能返回動態地被分派了的數組或外部的數組的尺寸
9.數組作爲參數傳給函數時傳的是指針而不是數組,傳遞的是數組的首地址

2、使用sizeof計算聯合體的大小
#include

union u  
{  
    double a;  
    int b;  
};  

union u2  
{  
    char a[13];  
    int b;  
};  

union u3  
{  
    char a[13];  
    char b;  
};  

int main()  
{  
    cout<<sizeof(u)<<endl;   8
    cout<<sizeof(u2)<<endl;  16
    cout<<sizeof(u3)<<endl;  13

    return 0;  
}  

3、#pragma pack的作用 看代碼寫輸出
#include

using namespace std;  

#pragma pack(1)  

struct test{  
    char c;  
    short s1;  
    short s2;  
    int i;  
};  

int main()  
{  
    cout<<sizeof(test)<<endl;  9

    return 0;  
}  

4、用指針賦值 看代碼寫輸出

    #include <stdio.h>  

    int main()  
    {  
        char a[] = "hello, world";  
        char *pstr = a;  

        printf("%c\n", *(pstr+4));     o        
        printf("%c\n", pstr[4]);       o
        printf("%c\n", a[4]);          o
            printf("%c\n", *(a+4));        o

        *(pstr+4) += 1;                           
        printf("%s\n", a);             p 

        return 0;  
    }  

5、指針加減操作 看代碼,寫輸出

    #include <stdio.h>  

    int main()  
    {  
        int a[5] = {1,2,3,4,5};  
        int *ptr = (int*)(&a+1);  

        printf("%d\n", *(a+1));        2
        printf("%d\n", *(ptr-1));      5

        return 0;  
    }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章