程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C面試題精選

C面試題精選

編輯:關於C語言

1、運行下圖中C代碼,輸出的結果是什麼?


[cpp]
int main(int argc, char** argv[]) 

    char str1[] = "hello world"; 
    char str2[] = "hello world"; 
  
    char* str3 = "hello world"; 
    char* str4 = "hello world"; 
  
    if(str1 == str2) 
        printf("str1 and str2 are same.\n"); 
    else 
        printf("str1 and str2 are not same.\n"); 
  
    if(str3 == str4) 
        printf("str3 and str4 are same.\n"); 
    else 
        printf("str3 and str4 are not same.\n"); 
  
    return 0; 

int main(int argc, char** argv[])
{
    char str1[] = "hello world";
    char str2[] = "hello world";
 
    char* str3 = "hello world";
    char* str4 = "hello world";
 
    if(str1 == str2)
        printf("str1 and str2 are same.\n");
    else
        printf("str1 and str2 are not same.\n");
 
    if(str3 == str4)
        printf("str3 and str4 are same.\n");
    else
        printf("str3 and str4 are not same.\n");
 
    return 0;
}
答案:輸出兩行。第一行是str1 and str2 are not same,第二行是str3 and str4 are same。


str1和str2是兩個字符串數組。我們會為它們分配兩個長度為12個字節的空間,並把"hello world"的內容分別拷貝到數組中去。這是兩個初始地址不同的數組,因此比較str1和str2的值,會不相同。str3和str4是兩個指針,我們無需為它們分配內存以存儲字符串的內容,而只需要把它們指向"hello world“在內存中的地址就可以了。由於"hello world”是常量字符串,它在內存中只有一個拷貝,因此str3和str4指向的是同一個地址。因此比較str3和str4的值,會是相同的。

 

 

2、運行下圖中的C++代碼,打印出的結果是什麼?


[cpp]
int Fun1(char* str) 

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

  
int Fun2(char* str) 

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

  
int main(int argc, char ** argv[]) 

    int res1, res2; 
    res1 = (Fun1("a") && Fun2("b")) || (Fun1("c") || Fun2("d")); 
    res2 = (Fun1("a") && Fun2("b")) && (Fun1("c") || Fun2("d")); 
  
    return res1 || res2; 

int Fun1(char* str)
{
    printf("%s\n", str);
    return 0;
}
 
int Fun2(char* str)
{
    printf("%s\n", str);
    return 1;
}
 
int main(int argc, char ** argv[])
{
    int res1, res2;
    res1 = (Fun1("a") && Fun2("b")) || (Fun1("c") || Fun2("d"));
    res2 = (Fun1("a") && Fun2("b")) && (Fun1("c") || Fun2("d"));
 
    return res1 || res2;
}
答案:打印出4行,分別是a、c、d、a。
在C/C++中,與、或運算是從左到右的順序執行的。在計算rest1時,先計算Fun1(“a”) && Func2(“b”)。首先Func1(“a”)打印出內容為a的一行。由於Fun1(“a”)返回的是false, 無論Func2(“b”)的返回值是true還是false,Fun1(“a”) && Func2(“b”)的結果都是false。由於Func2(“b”)的結果無關重要,因此Func2(“b”)會略去而不做計算。接下來計算Fun1(“c”) || Func2(“d”),分別打印出內容c和d的兩行。

在計算rest2時,首先Func1(“a”)打印出內容為a的一行。由於Func1(“a”)返回false,和前面一樣的道理,Func2(“b”)會略去不做計算。由於Fun1(“a”) && Func2(“b”)的結果是false,不管Fun1(“c”) && Func2(“d”)的結果是什麼,整個表達式得到的結果都是false,因此Fun1(“c”) && Func2(“d”)都將被忽略。

3、


[cpp]
int SizeOf(char pString[]) 

        return sizeof(pString); 

  
int main(int argc, char ** argv[]) 

        char* pString1 = "google"; 
        int size1 = sizeof(pString1); 
        int size2 = sizeof(*pString1); 
  
        char pString2[100] = "google"; 
        int size3 = sizeof(pString2); 
        int size4 = SizeOf(pString2); 
  
        printf("%d, %d, %d, %d", size1, size2, size3, size4); 
  
        return 0; 

int SizeOf(char pString[])
{
        return sizeof(pString);
}
 
int main(int argc, char ** argv[])
{
        char* pString1 = "google";
        int size1 = sizeof(pString1);
        int size2 = sizeof(*pString1);
 
        char pString2[100] = "google";
        int size3 = sizeof(pString2);
        int size4 = SizeOf(pString2);
 
        printf("%d, %d, %d, %d", size1, size2, size3, size4);
 
        return 0;
}
答案:4, 1, 100, 4。pString1是一個指針。在32位機器上,任意指針都占4個字節的空間。*pString1是字符串pString1的第一個字符。一個字符占一個字節。pString2是一個數組,sizeof(pString2)是求數組的大小。這個數組包含100個字符,因此大小是100個字節。而在函數SizeOf中,雖然傳入的參數是一個字符數組,當數組作為函數的參數進行傳遞時,數組就自動退化為同類型的指針。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved