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

iOS開發入門 ☞ C言語(關鍵字、字符串面試題)

編輯:關於C++

iOS開發入門 ☞ C言語(關鍵字、字符串面試題)。本站提示廣大學習愛好者:(iOS開發入門 ☞ C言語(關鍵字、字符串面試題))文章只能為提供參考,不一定能成為您想要的結果。以下是iOS開發入門 ☞ C言語(關鍵字、字符串面試題)正文


全局變量

  全局變量:定義在函數體內部(包括main函數),其作用域為整個順序(可以在任何函數中訪問)

  • 運用 extern 關鍵字聲明另一個文件定義的全局變量。

    extern int global; //聲明一個全局變量。相當於通知編譯器,你別管啦,這是個全局變量,我保證他是存在的。

  • 全局變量有風險,慎重定義,由於任何人都能修正它的值。    

    static int global = 200; //全局靜態變量(靜態的只允許本文件外部訪問)

  • 全局變量的生命周期是整個順序運轉時期。全局變量沒有初始化時,其值為0,浮點型是0.0,布爾類型是false(0)
部分變量

1)定義在函數外部(包括:函數的參數、if、for、while外面定義的變量)

2)定義在復合語句(代碼塊{……})中

  • 默許的部分變量(也叫自動變量):

    auto int a; //由關鍵字auto聲明,可以省略。內存空間是自動分配,(出了作用域)自動釋放!

  

  • 靜態部分變量:

    static int a; //變量a在全局區分配空間,函數完畢時分,內存不會釋放。

※ 不論調用函數多少次,這條語句只執行一次,即第一次執行,內存空間不受函數的控制。

※ 靜態部分變量的生命周期和全局變量一樣,都是整個順序運轉時期!

※ 部分變量在沒有初始化的狀況下是一個隨機數據(渣滓值)

auto關鍵字

auto int x;//自動變量,部分變量(auto默許省略)

auto 只能修飾部分變量,不能修飾全局變量!

static關鍵字

  1. 修飾部分變量:生命周期變長(整個順序運轉時期),作用域不變(和普通變量一樣)

          static修飾的部分變量,其數值就是上一次函數調用完畢之後的數值!

          擴展(用處):可以記載一個函數被調用了多少次!

//計數器函數,記載被調用的次數

int count() {

    static int cnt = 0; //不論調用多少次函數,這條語句只會執行一次

    cnt++;

    return cnt;

}

   

  2. 修飾全局變量:只能在本文件外部訪問,其它文件不能訪問。維護全局變量。

  //靜態的只允許本文件外部訪問

  static int global = 200;//全局靜態變量

 

3. 修飾函數:也是只能在本文件中訪問,其它文件都不能訪問!

//此函數為公有函數,只允許本文件外部調用,別的文件中無法調用

static void func(){

    printf("這是本文件外部函數,其它文件中無法調用!\n");

}

 

  舉例:運用static修飾部分變量,檢查特性。

   

  比照之下,可以看出運用static修飾的部分變量的特性,訪問范圍和普通的部分變量一樣,但是在函數執行終了之後其數值並不會釋放。

   

const關鍵字

  const修飾的變量:只讀變量(常量),不可修正變量的數值!

  

  

register、volatile

//存放器變量,僅僅是請求一下,編譯器不一定同意

register int x = 10;//CPU, 實際上存取速度十分快

//易變的變量,編譯器讀取時不要做優化處置,除非在嵌入式開發中運用傳感器改動變量的值時  

volatile int y = 20;

 

運用 extern 關鍵詞聲明另一個文件定義的全局變量

extern int global; //聲明一個全局變量。相當於通知編譯器,你別管啦,這是個全局變量,我保證他是存在的。

extern void sum(); //內部函數的聲明。

static void minus(); //外部函數的聲明

 

字符串面試題

/**

 *  完成字符串常用的4個庫函數

 */

#include <stdio.h>

#include <assert.h>

/** 完成strlen函數 */

int mystrlen(char *arr) {

    int count = 0;//定義變量記載取出了多少個字符

    while(arr[count] != '\0') {

        count++;

    }

    return count;

}

/** 完成strcat函數 */

char *mystrcat(char *str1, const char *str2) {

    char *tmp = str1;

    while(*str1)

        str1++;

    while((*str1++ = *str2++) != '\0');

    return tmp;

}

/** 完成strcpy函數 */

char *mystrcpy(char *str1, const char *str2) {

    assert(str1 != NULL && str2 != NULL);//斷言函數,反省參數的無效性(防錯設計)

    char *tmp = str1;

//*str2對*str1逐一字符停止賦值

//*str2直到把'\0'賦值給*str1時,*str1的後果就是0,循環就完畢!

    while((*str1++ = *str2++));

    return tmp;

}

/** 完成strcmp函數 */

int mystrcmp(char *str1, char *str2) {

    assert(str1 != NULL && str2 != NULL);

    while(*str1 == *str2 && *str1 != '\0') str1++, str2++;

    if(*str1 > *str2) {

        return 1;

    } else if(*str1 < *str2) {

        return -1;

    } else {

        return 0;

    }

}

int main() {

    char str1[] = "hello";

    char *str2 = "world";

    printf("%d\n", mystrlen(str1));//str1的長度為:5

    printf("%s\n", mystrcat(str1, str2));//拼接後:helloworld

    printf("%s\n", mystrcpy(str1, "ABCDE"));//拷貝(掩蓋):ABCDEF

    printf("%d\n", mystrcmp(str1, str2)); //-1(str1 < str2)

    return 0;

}

  

//字符串賦值(拷貝)

void Strcpy(char *s1, const char *s2)

{

    //while(*s1++ = *s2++);

    while (*s2 != '\0') {

        *s1 = *s2;

        s1++;

        s2++;

    }

    *s1 = '\0';

}

//字符串銜接

void Strcat(char *s1, const char *s2)

{

    while(*s1)s1++;

    //while(*s1++ = *s2++);

    while(*s2){

        *s1 = *s2;

        s1++;

        s2++;

    }

    *s1 = 0;

}

//字符串長度

int Strlen(const char *str)

{

    int cnt = 0;//保管後果

    while (*str) {

        cnt++;

        str++;

    }

    return cnt;

}

//字符串比擬

int Strcmp(const char *s1, const char *s2)

{

    while(*s1 || *s2){

        if(*s1 > *s2)  return 1;

        else if(*s1 < *s2) return -1;

        s1++;

        s2++;

    }

    return 0;

}

  

  

有一個字符串"abcd1234",請寫一個函數,將此字符串拆成兩局部, abcd保管到char str[10]中,1234保管到變量int x中:

int str2int(char *str, char *s){

    //....

}

int main()

{

    char *source = "abcd1234";

    char str[10] = {0};

    int x = 0;

    x = str2int(cource, str);

}

 

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