天天看點

c語言不能調用strcat連接配接兩個字元串_C語言學習筆記(函數)

c語言不能調用strcat連接配接兩個字元串_C語言學習筆記(函數)

以下為原文效果好一些 - -

C語言學習筆記(函數) - Muxxs學習世界​note.muxxs.com

c語言不能調用strcat連接配接兩個字元串_C語言學習筆記(函數)

函數

函數類型 函數名(參數類型 參數名)

  • 函數類型<->return的類型
  • 函數若不傳回,函數類型為void
  • 若無參數,參數名處為void
  • 若函數在被調用處之後,應先聲明函數

1.嵌套調用

int main(){
    print("%d",max(1,2,3,4)); //起點
    return 0;
}

int max4(int a,int b,int c,int d){
    int max2(int a,int b); //->此處max2在max4後面,需要聲明
    m=max2(a,b);
    m=max2(m,c);
    m=max2(m,d);
    return m;
}
int max2(int a,int b){
    if (a>b){
        return a;
    }else{
        return b;
    }
}
           

2.遞歸調用

我調用我自己

這種情況下每次循環都會被暫存到記憶體中,空間複雜度較大

int f(int x){
    int y,z;
    printf(x);
    z=f(y);
    return (2*z);
}
           

比如這個,會自己調用自己

st=>start: Start
op1=>operation: f ( x )
e=>operation: Operation

st->op1->e->op1
           
無 限 套 娃

3.數組作為函數參數

Example:

int max(x[10])

也可以不指定數組的大小

int max(x[])

多元數組

類比上面

int max(x[][3])

4.局部變量和全局變量

局部變量:

函數體内定義的變量

Example:

float f1(int a){
    int b,c; -> b和c為局部變量
    ...
}
           

全局變量:

函數體外定義的變量

Example:

int d=10; //d->全局變量
float f1(int a){
    int b,c; //-> b和c為局部變量
    ...
}
           

5. 變量的存儲方式和生存期

digraph main{
    使用者區->程式區
    使用者區->靜态存儲區
    使用者區->動态存儲區
    動态存儲區->形參
    動态存儲區->沒用static聲明的變量
    動态存儲區->函數調用時的現場保護和傳回位址
}
           
digraph main{
    變量和函數 -> 資料類型
    變量和函數 -> 資料的存儲類别
    資料的存儲類别 -> 靜态存儲
    資料的存儲類别 -> 動态存儲
}
           
1. 局部變量的存儲類别

* 自動變量

auto 變量類型 變量名;

**不寫auto則隐含指定為“自動存儲類别”**

調用時系統配置設定存儲空間,調用結束時釋放空間
           
  • 靜态局部變量(static 局部變量)

    static 變量類型 變量名

    靜态局部變量在調用後不釋放,仍保留原來的值 一直保留到程式運作結束 下次static的時候不指派,保留上次的值
  • 寄存器變量(register 變量)

    register 變量類型 變量名

    這種變量是存儲在寄存器當中的(速度比較快,但是不知道為啥不用了)
2. 全局變量的存儲類别
  1. 一個檔案内擴充外部變量作用域 & 将外部變量的作用域擴充到其他檔案

    extern 變量名

    擴充後可正常使用
  2. 将外部變量作用域限制在本檔案中

    static 變量類型 變量名

小結

```dot digraph main{ 按照作用域 -> 局部變量 按照作用域 -> 全局變量 局部變量 -> 自動變量 局部變量 -> 靜态局部變量 局部變量 -> 寄存器變量 全局變量 -> 靜态外部變量 全局變量 -> 外部變量 }定義字元數組

char 變量[常量表達式];

字元型資料以ASCII 碼的形式存儲在數組中

字元數組的初始化

用初始化清單的方法

char c[3]={'O',"K","!"};
           

結構如下⬇️ | c[0] | c[1] | c[2] | | ---- | ---- | ---- | | O | K | ! |

也可以用這種友善的方法⬇️
char c[]={"OK!"};
           

結構如下⬇️ | c[0] | c[1] | c[2] | c[c] | | ---- | ---- | ---- | ---- | | O | K | ! | 0 |

這種會多一個0在結尾,表示這是一個字元串

引用字元數組中的元素

Example:

printf("%c",c[1]);
           

字元數組的輸入輸出

char c[]={"China"};

  • 可以用循環 print("%c",c[n]) 輸出
  • 可以用 print("%s",c) 直接輸出字元串

字元串處理函數

  1. puts函數

puts(字元數組)

Example:

puts(c);

-> China

  1. gets函數

gets(字元數組)

Example:

gets(c);

将獲得的資料指派給c

  1. strcat函數

字元串連接配接函數

strcat(字元數組1,字元數組2)

char str1[]={"China is"}; char str2[]={" a good country"}; printf("%sn",strcat(str1,str2));

res -> China is a good country

  1. strcpy和strncpy函數

字元串複制函數

strcpy(字元數組1,字元串2)

将字元串2 指派--> 字元數組1

Example:

char str1[10],str2[]={"china"}; strcpy(str1,str2);

str1的狀态為: | | | | | | | | | | | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | c | h | i | n | a | 0 | 0 | 0 | 0 | 0 |

strncpy(字元數組1,字元串2,字元數)

Example:

char str1[10],str2[]={"china"}; strncpy(str1,str2,2);

str1的狀态為: | | | | | | | | | | | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | c | h | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

  1. 字元串比較函數

strcmp(字元串1,字元串2)

比較字元串1和字元串2,自左至右逐個字元比較,直到出現不同的字元或出現

此時比較不同的這對字元的大小。

| 字元相同 | 字元串1>字元串2 | 字元串2>字元串1 | | -------- | --------------- | --------------- | | 0 | 正整數 | 負整數 |

  1. 字元串測長度函數

strlen(字元數組)

傳回字元數組實際值的長度

(不包括 0 )

繼續閱讀