日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

重学C语言_数据结构与基础语法

發(fā)布時(shí)間:2025/1/21 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重学C语言_数据结构与基础语法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

c語(yǔ)言標(biāo)準(zhǔn)

2011年12月8日,國(guó)際標(biāo)準(zhǔn)化組織(ISO)和國(guó)際電工委員會(huì)(IEC) 旗下的C語(yǔ)言標(biāo)準(zhǔn)委員會(huì)(ISO/IEC JTC1/SC22/WG14)正式發(fā)布了C11標(biāo)準(zhǔn)。

C11標(biāo)準(zhǔn)是C語(yǔ)言標(biāo)準(zhǔn)的第三版,前一個(gè)標(biāo)準(zhǔn)版本是C99標(biāo)準(zhǔn)。

目前程序設(shè)計(jì)學(xué)習(xí)使用最多的標(biāo)準(zhǔn)是C99,它是1999年發(fā)布的。

環(huán)境安裝

要想運(yùn)行C語(yǔ)言程序,電腦里面必須得有GCC,也就是C語(yǔ)言的編譯器。

  • 驗(yàn)證有沒(méi)有g(shù)cc
  • cmd里面敲gcc -v

Windows 上的安裝

為了在 Windows 上安裝 GCC,您需要安裝 MinGW。為了安裝 MinGW,請(qǐng)?jiān)L問(wèn) MinGW 的主頁(yè) www.mingw.org,進(jìn)入 MinGW 下載頁(yè)面,下載最新版本的 MinGW 安裝程序,命名格式為 MinGW-.exe。

  • 訪問(wèn)官網(wǎng)
  • http://www.mingw.org/
  • 點(diǎn)擊download

  • 點(diǎn)擊logo

  • 點(diǎn)擊logo進(jìn)行下載
  • 添加到環(huán)境變量
  • 當(dāng)然,你也可以使用IDE里面自帶的編譯器,一般codeblocks等編輯器都自帶MinGW。

    Hello world!

    #include <stdio.h> int main() {/* 我的第一個(gè) C 程序 文件名 hello.c */printf("Hello, World! \n");return 0; }

    編譯運(yùn)行這一段代碼。

    gcc hello.c

    它會(huì)自動(dòng)生成一個(gè)a.exe文件 (LINUX平臺(tái)為 a.out)

    通過(guò) ./a.exe 就可以執(zhí)行。

    注釋

    // 單行注釋 /** 多行注釋*/

    標(biāo)識(shí)符

    用來(lái)標(biāo)識(shí)變量、函數(shù)。

    • 由字母、數(shù)字、下劃線組成
    • 數(shù)字不能打頭陣
    • 不能出現(xiàn)特殊符號(hào)($、@ 不能出現(xiàn))
    • 區(qū)分大小寫(xiě)

    C數(shù)據(jù)類型

    整數(shù)類型

    char、int、short、long、long long都是整數(shù)類型

    他們都可以有unsigned的前綴。(unsigned 無(wú)符號(hào))

    char 的值范圍 -128到127 (-128的二進(jìn)制 10000000)

    unsigned char 的值范圍是 0 到 255

    浮點(diǎn)數(shù)類型

    double 和 float

    定義常量

    在 C 中,有兩種簡(jiǎn)單的定義常量的方式:

  • 使用 #define 預(yù)處理器。
  • 使用 const 關(guān)鍵字。
  • #define identifier value or const type variable = value; // const int

    C語(yǔ)言修飾符

    auto

    所有局部變量的默認(rèn)值

    {int variable;等價(jià)于auto int variable; }

    static

    可以修飾局部變量 和 全局變量。

    c 語(yǔ)言中,把變量定義在 大括號(hào)外面就是全局變量。

    static int count = 10; 等價(jià)于 int count = 10;void main(){// do something }

    extern

    extern 存儲(chǔ)類用于提供一個(gè)全局變量的引用,全局變量對(duì)所有的程序文件都是可見(jiàn)的。當(dāng)您使用 extern 時(shí),對(duì)于無(wú)法初始化的變量,會(huì)把變量名指向一個(gè)之前定義過(guò)的存儲(chǔ)位置。

    詳細(xì)見(jiàn)菜鳥(niǎo)教程

    c - if 判斷

    定義:C 語(yǔ)言把任何非零非空的值假定為 true,把null 假定為 false

    C - 循環(huán)

    • 有while,for,do while循環(huán)

    • break 結(jié)束循環(huán)

    • continue 停止本次循環(huán),執(zhí)行下一步

    C - 函數(shù)

    語(yǔ)法:

    return_type function_name( parameter list ) {body of the function }
    • **返回類型:**一個(gè)函數(shù)可以返回一個(gè)值。return_type 是函數(shù)返回的值的數(shù)據(jù)類型。有些函數(shù)執(zhí)行所需的操作而不返回值,在這種情況下,return_type 是關(guān)鍵字 void
    • **函數(shù)名稱:**這是函數(shù)的實(shí)際名稱。函數(shù)名和參數(shù)列表一起構(gòu)成了函數(shù)簽名。
    • **參數(shù):**參數(shù)就像是占位符。當(dāng)函數(shù)被調(diào)用時(shí),您向參數(shù)傳遞一個(gè)值,這個(gè)值被稱為實(shí)際參數(shù)。參數(shù)列表包括函數(shù)參數(shù)的類型、順序、數(shù)量。參數(shù)是可選的,也就是說(shuō),函數(shù)可能不包含參數(shù)。
    • **函數(shù)主體:**函數(shù)主體包含一組定義函數(shù)執(zhí)行任務(wù)的語(yǔ)句。

    函數(shù)參數(shù)

    如果函數(shù)要使用參數(shù),則必須聲明接受參數(shù)值的變量。這些變量稱為函數(shù)的形式參數(shù)

    形式參數(shù)就像函數(shù)內(nèi)的其他局部變量,在進(jìn)入函數(shù)時(shí)被創(chuàng)建,退出函數(shù)時(shí)被銷毀。

    函數(shù)參數(shù):

    • 傳值 (不會(huì)修改原來(lái)的值)
    • 傳地址

    函數(shù)聲明:

    • 如果調(diào)用外部函數(shù),必須得提前聲明
    • 如果main在調(diào)用的函數(shù)前面,必須得提前聲明

    函數(shù)的形參名不重要,所以函數(shù)聲明時(shí)可以忽略。

    #include <stdio.h> #include <stdlib.h> int sum(int,int); // int sum(int a,int b); // 這兩種都可以int main() {int x=3,y=5;printf("%d",sum(x,y));return 0; }int sum(int a,int b){return a+b; }

    當(dāng)形參和全局變量同名的時(shí)候,形參的值在函數(shù)體內(nèi)部會(huì)覆蓋掉全局變量。

    傳遞數(shù)組給函數(shù)作為參數(shù)

    方式 1

    形式參數(shù)是一個(gè)指針:

    void myFunction(int *param) { . . . }

    方式 2

    形式參數(shù)是一個(gè)已定義大小的數(shù)組:

    void myFunction(int param[10]) { . . . }

    方式 3

    形式參數(shù)是一個(gè)未定義大小的數(shù)組:

    void myFunction(int param[]) { . . . }

    建議采用方式1或者3

    數(shù)組作為函數(shù)的返回值

    C 語(yǔ)言不允許返回一個(gè)完整的數(shù)組作為函數(shù)的參數(shù)。

    但是,您可以通過(guò)指定不帶索引的數(shù)組名來(lái)返回一個(gè)指向數(shù)組的指針。

    // int[] getArr() //這種語(yǔ)法是錯(cuò)誤的int * getArr( ) {static int r[10] = {1,2,3};; // 必須使用static來(lái)修飾,否則報(bào)錯(cuò)return r; }

    初始化局部變量和全局變量

    當(dāng)局部變量被定義時(shí),系統(tǒng)不會(huì)對(duì)其初始化,您必須自行對(duì)其初始化。定義全局變量時(shí),系統(tǒng)會(huì)自動(dòng)對(duì)其初始化,如下所示:

    數(shù)據(jù)類型初始化默認(rèn)值
    int0
    char‘\0’
    float0
    double0
    pointerNULL

    正確地初始化變量是一個(gè)良好的編程習(xí)慣,否則有時(shí)候程序可能會(huì)產(chǎn)生意想不到的結(jié)果,因?yàn)槲闯跏蓟淖兞繒?huì)導(dǎo)致一些在內(nèi)存位置中已經(jīng)可用的垃圾值。

    作用域

    • 全局變量
    • 局部變量
    • 形式參數(shù)

    c語(yǔ)言中是塊級(jí)作用域,即變量只服務(wù)于大括號(hào)內(nèi)部。

    {int a; // 外面訪問(wèn)不到這個(gè) }

    函數(shù)體定義的形參等價(jià)于函數(shù)體內(nèi)部定義的局部變量。

    void func(int x){// 等價(jià)于函數(shù)體里面寫(xiě) int x; }

    當(dāng)局部變量和全局變量重名的時(shí)候,優(yōu)先獲取的是局部變量的值。

    C - 數(shù)組

    定義: 數(shù)組是用來(lái)存儲(chǔ)一系列數(shù)據(jù),它是一系列相同類型的變量。

    語(yǔ)法:type arrayName [ arraySize ];

    初始化數(shù)組

    在 C 中,您可以逐個(gè)初始化數(shù)組,也可以使用一個(gè)初始化語(yǔ)句,如下所示:

    double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

    大括號(hào) { } 之間的值的數(shù)目不能大于我們?cè)跀?shù)組聲明時(shí)在方括號(hào) [ ] 中指定的元素?cái)?shù)目。

    如果您省略掉了數(shù)組的大小,數(shù)組的大小則為初始化時(shí)元素的個(gè)數(shù)。因此,如果:

    double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

    如果您只賦值,其中一部分,那么剩余的值將采用默認(rèn)值。

    int arr[5] = {1,2,3}; // [1,2,3,0,0] int的默認(rèn)值是0

    獲取數(shù)組的Length

    int arr[5] = {1,2,3}; int len = sizeof(arr) / sizeof(arr[0]); // 5

    使用size運(yùn)算符通過(guò)計(jì)算就可以獲得數(shù)組的長(zhǎng)度,但是這還是很不方便。

    可以進(jìn)一步使用宏定義。

    #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} int main (){int arr[5] = {1,2,3};int len;GET_ARRAY_LEN(arr,len); // 此時(shí)len = 5 }

    千萬(wàn)不要把sizeof(arr) / sizeof(arr[0])封裝到函數(shù)里面,你獲取的長(zhǎng)度將永遠(yuǎn)是1。

    深坑,請(qǐng)勿踩雷!~

    二維數(shù)組

    多維數(shù)組最簡(jiǎn)單的形式是二維數(shù)組。一個(gè)二維數(shù)組,在本質(zhì)上,是一個(gè)一維數(shù)組的列表。聲明一個(gè) x 行 y 列的二維整型數(shù)組,形式如下:

    type arrayName [ x ][ y ];

    其中,type 可以是任意有效的 C 數(shù)據(jù)類型,arrayName 是一個(gè)有效的 C 標(biāo)識(shí)符。一個(gè)二維數(shù)組可以被認(rèn)為是一個(gè)帶有 x 行和 y 列的表格。下面是一個(gè)二維數(shù)組,包含 3 行和 4 列:

    int x[3][4];

    因此,數(shù)組中的每個(gè)元素是使用形式為 a[ i , j ] 的元素名稱來(lái)標(biāo)識(shí)的,其中 a 是數(shù)組名稱,i 和 j 是唯一標(biāo)識(shí) a 中每個(gè)元素的下標(biāo)。

    初始化二維數(shù)組

    多維數(shù)組可以通過(guò)在括號(hào)內(nèi)為每行指定值來(lái)進(jìn)行初始化。下面是一個(gè)帶有 3 行 4 列的數(shù)組。

    int a[3][4] = { {0, 1, 2, 3} , /* 初始化索引號(hào)為 0 的行 */{4, 5, 6, 7} , /* 初始化索引號(hào)為 1 的行 */{8, 9, 10, 11} /* 初始化索引號(hào)為 2 的行 */ };

    內(nèi)部嵌套的括號(hào)是可選的,下面的初始化與上面是等同的:

    int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

    訪問(wèn)二維數(shù)組元素

    二維數(shù)組中的元素是通過(guò)使用下標(biāo)(即數(shù)組的行索引和列索引)來(lái)訪問(wèn)的。例如:

    int val = a[2][3];

    C - 枚舉

    語(yǔ)法:enum 枚舉名 {枚舉元素1,枚舉元素2,……};

    enum DAY {MON=1, TUE, WED, THU, FRI, SAT, SUN };

    這樣看起來(lái)是不是更簡(jiǎn)潔了。

    **注意:**第一個(gè)枚舉成員的默認(rèn)值為整型的 0,后續(xù)枚舉成員的值在前一個(gè)成員上加 1。我們?cè)谶@個(gè)實(shí)例中把第一個(gè)枚舉成員的值定義為 1,第二個(gè)就為 2,以此類推。

    可以在定義枚舉類型時(shí)改變枚舉元素的值:

    enum season {spring, summer=3, autumn, winter};

    沒(méi)有指定值的枚舉元素,其值為前一元素加 1。也就說(shuō) spring 的值為 0,summer 的值為 3,autumn 的值為 4,winter 的值為 5

    枚舉變量的定義 - 實(shí)例化

    前面我們只是聲明了枚舉類型,接下來(lái)我們看看如何定義枚舉變量。

    我們可以通過(guò)以下三種方式來(lái)定義枚舉變量

    1、先定義枚舉類型,再定義枚舉變量

    enum DAY {MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day;

    2、定義枚舉類型的同時(shí)定義枚舉變量

    enum DAY {MON=1, TUE, WED, THU, FRI, SAT, SUN } day;

    3、省略枚舉名稱,直接定義枚舉變量

    enum {MON=1, TUE, WED, THU, FRI, SAT, SUN } day;

    C - 指針

    定義:指針是一個(gè)變量,其值為另一個(gè)變量的地址。

    語(yǔ)法: type * variable

    備注:這個(gè)*是聲明指針運(yùn)算符,不是乘號(hào),更不是對(duì)地址取值

    #include <stdio.h>int main () {int var = 20; /* 實(shí)際變量的聲明 */int *ip; /* 指針變量的聲明 */ip = &var; /* 在指針變量中存儲(chǔ) var 的地址 */printf("var 變量的地址: %p\n", &var );/* 在指針變量中存儲(chǔ)的地址 */printf("ip 變量存儲(chǔ)的地址: %p\n", ip );/* 使用指針訪問(wèn)值 */printf("*ip 變量的值: %d\n", *ip );return 0; }

    空指針

    在變量聲明的時(shí)候,如果沒(méi)有確切的地址可以賦值,為指針變量賦一個(gè) NULL 值是一個(gè)良好的編程習(xí)慣。

    #define NULL 0 // NULL 指針是一個(gè)定義在標(biāo)準(zhǔn)庫(kù)中的值為零的常量。

    實(shí)例:

    #include <stdio.h> int main () { int *ptr = NULL; printf("ptr 的地址是 %p\n", ptr ); return 0; }

    當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

    ptr 的地址是 0x0

    取值和取地址運(yùn)算符

    // * 取值運(yùn)算符 // & 取地址運(yùn)算符int main() {int a = 1;int *p;p = &a;printf("%d",*p); // 1return 0; }

    總結(jié)

    以上是生活随笔為你收集整理的重学C语言_数据结构与基础语法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。