亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語(yǔ)言各種符號(hào)的使用介紹上篇

 更新時(shí)間:2022年08月10日 08:36:13   作者:程序猿教你打籃球  
C 語(yǔ)言的基本符號(hào)就有 20 多個(gè),每個(gè)符號(hào)可能同時(shí)具有多重含義,而且這些符號(hào)之間相互組合又使得 C 語(yǔ)言中的符號(hào)變得更加復(fù)雜起來(lái)

1、注釋符號(hào)

1.1 注釋的基本注意事項(xiàng)

為了更好的演示我們下面的代碼會(huì)在 Linux 平臺(tái)下演示( \ 為續(xù)行符):

這段代碼,哪一行是有問(wèn)題的呢?

這里可能有小伙伴就有疑問(wèn)了,為什么只有這一行出了問(wèn)題呢?我們知道注釋在預(yù)處理階段就被編譯器識(shí)別出來(lái)了,這里我們可以用 Linux 的一個(gè)指令:gcc -E test.c -o test.i這樣就是對(duì)test.c 程序進(jìn)行翻譯,最終把預(yù)處理的結(jié)果保留下來(lái),接著就可以用 vim 打開我們的預(yù)處理結(jié)果文件了。

最終我們可以得出這樣一個(gè)結(jié)論:注釋被替換本質(zhì)上是被替換成空格!

這里我們要再提一個(gè)簡(jiǎn)單的點(diǎn),C語(yǔ)言注釋無(wú)法被嵌套,/* 總是與最近的 */ 匹配,感興趣的小伙伴可以去測(cè)試下:

int main()
{
    /*
    /*printf("hello world");
    printf("hello world");*/
    */
    return 0;
}

這里還有一個(gè)有趣的代碼,如果用C語(yǔ)言的注釋的話,如果只出現(xiàn)了一個(gè) /* 找不到下面的 */ 的話,那么他就會(huì)默認(rèn)下面所有代碼都被注釋!

int main()
{
    int x = 10;
    int y = 5;
    int ret = 0;
    int* p = &y;
    ret = y/*p;
    return 0;
}

那么如何解決上面這種情況呢?

在 / 與 * 中加上空格: ret = y / *p;

把 *p 用括號(hào)括起來(lái): ret = y / (*p);

推薦第二種,因?yàn)榭雌饋?lái)會(huì)更直觀

1.2 如何寫出好的注釋

[ 建議1 ] 注釋應(yīng)該準(zhǔn)確易懂,不能有爭(zhēng)議性,錯(cuò)誤的注釋反而有害。

[ 建議2 ] 要保證注釋與代碼的一致性,沒(méi)用的注釋及時(shí)刪除。

[ 建議3 ] 對(duì)于全局?jǐn)?shù)據(jù) (全局變量、常量定義)必須要加注釋。

[ 建議4 ] 一目了然的語(yǔ)句可以不加注釋,比如:i++; // i 自增1。

[ 建議5 ] 注釋的位置應(yīng)與被描述的代碼相鄰,可以與語(yǔ)句同一行,不放在下方。

[ 建議6 ] 當(dāng)代碼比較長(zhǎng),特別是有多重其那套時(shí),應(yīng)當(dāng)在一些段落的結(jié)束處加注釋。

[ 建議7 ] 注釋的縮進(jìn)要與代碼的縮進(jìn)一致。

[ 建議8 ] 注釋代碼應(yīng)當(dāng)注重,“ 為何做 ” ,而不是 “ 怎么做 ”。

[ 建議9 ] 數(shù)值的單位一定要給上注釋。

[ 建議10 ] 復(fù)雜的函數(shù)中,在分支語(yǔ)句、循環(huán)語(yǔ)句結(jié)束之后需要適當(dāng)?shù)淖⑨專奖銋^(qū)分各個(gè)分支或循環(huán)體。

2、接續(xù)符和轉(zhuǎn)移符

2.1 續(xù)行功能

C語(yǔ)言里用反斜杠( \ )表示斷航。編譯器會(huì)將反斜杠剔除掉,跟在反斜杠后面的字符自動(dòng)續(xù)接到前一行。但是注意:反斜杠之后不能有空格,感興趣的小伙伴可以下來(lái)測(cè)試下:

int main()
{
    int a = 1;
    int b = 2;
    int c = 3;
    if (1 == a && \
        2 == b && \
        3 == c)
    {
        printf("You can see me!\n");
    }
    else
    {
        printf("You can not see me!\n");
    }
    return 0;
}

可能有的小伙伴會(huì)好奇,明明我不用 \ 也可以換行不會(huì)報(bào)錯(cuò)啊,那為什么還要用 \ 表示換行呢?我們作為一個(gè)程序員,別人可能也會(huì)去閱讀我們的代碼,如果不帶 \ 直接換行可能會(huì)出現(xiàn)奇異,在一個(gè)也可以告訴編譯器這個(gè)地方是續(xù)行,語(yǔ)義更強(qiáng)!

2.2 轉(zhuǎn)義字符

C語(yǔ)言中,有一些字符,就是他的字面意思,比如 'n','b','t'。 也有一些字符,本身就是特殊含義的,比如:" , ', \ 轉(zhuǎn)義的本質(zhì)含義是:字面轉(zhuǎn)特殊,或者特殊轉(zhuǎn)字面。

\ 有兩種用途:

  1. 當(dāng)續(xù)行符使用
  2. 轉(zhuǎn)義字符使用 (a. 字面轉(zhuǎn)特殊 b. 特殊轉(zhuǎn)字面)

這里我們重點(diǎn)講一下 \n 和 \r可能小伙伴們都聽過(guò)換行和回車吧!那么他們本質(zhì)上的意思是不一樣的!但是現(xiàn)在很多編譯器讓換行( \n )里面也包含了回車( \r ) 的功能!那他們倆究竟有什么樣的區(qū)別呢?

換行:讓光標(biāo)移動(dòng)到下一行

回車:光標(biāo)回到當(dāng)前行的最開始

這里小伙伴可以試一下用C語(yǔ)言寫一個(gè)簡(jiǎn)單的倒計(jì)時(shí)功能,就能很明顯的區(qū)分換行和回車的區(qū)別了!

這里我們也可以來(lái)看一道筆試題:

//以下程序輸出什么?
#include <string.h>
#include <stdio.h>
int main()
{
    printf("%d\n", strlen("abcdef"));
    // \62被解析成一個(gè)轉(zhuǎn)義字符
    printf("%d\n", strlen("c:\test\628\test.c"));
    return 0;
}

這里第一個(gè)打印函數(shù),我們?nèi)绻辛私?,strlen() 函數(shù)是求字符串中 \0 之前的字符個(gè)數(shù),所以第一個(gè)打印的是 6 , 第二個(gè)打印函數(shù),首先是 \t 被解析成一個(gè)轉(zhuǎn)義字符, \62 也被解析成一個(gè)轉(zhuǎn)義字符 (8進(jìn)制) 所以第二個(gè)打印的應(yīng)該是 14 !

3、單引號(hào)和雙引號(hào)

3.1 基本概念

對(duì)于C語(yǔ)言有了解的小伙伴都知道,單引號(hào)引起來(lái)的都是字符常量,雙引號(hào)引起來(lái)的都是字符串常量,但其實(shí)對(duì)于初學(xué)者來(lái)說(shuō)還是容易出錯(cuò),比如 'a',和 "a" 是完全不一樣的概念,在字符串中,以 \0 為結(jié)尾,他本質(zhì)上不屬于字符串的元素內(nèi)容,只能說(shuō)他是字符串結(jié)束標(biāo)識(shí)符,但是它會(huì)占用空間!也就是 'a' 會(huì)占一個(gè)字節(jié)而 "a",則會(huì)占兩個(gè)字節(jié)。

有了上面簡(jiǎn)單的概念我們來(lái)看一個(gè)例子:

這里可能就有小伙伴有疑問(wèn)了,前兩個(gè)和最后一個(gè) printf打印結(jié)果我還能理解,可是第三個(gè)為啥是占四個(gè)字節(jié)呢?這明明不是一個(gè)字符常量嗎?(C++ 中第三個(gè)大小為 1 個(gè)字節(jié),因?yàn)檫@里是講C語(yǔ)言所以我們不討論其他語(yǔ)言)

其實(shí)在 C99 標(biāo)準(zhǔn)的規(guī)定,'1' 叫做整型字符常量(integer character constant),被看成是 int 類型。

光是用 “ 標(biāo)準(zhǔn)規(guī)定 ” 用來(lái)證明是不可行的,我們?cè)儆靡粋€(gè)實(shí)例來(lái)證明:

看到這個(gè)結(jié)果不要驚訝,我剛剛說(shuō)過(guò),標(biāo)準(zhǔn)規(guī)定,整型字符常量被看成是 int 類型,所以他會(huì)有四個(gè)字節(jié)的空間,而且我當(dāng)前電腦是小端存儲(chǔ),所以低字節(jié)序放在低地址處,在者,將一個(gè)4字節(jié)的數(shù)據(jù)放入 char 類型的變量中是會(huì)發(fā)生數(shù)據(jù)截?cái)嗟?,?huì)將低地址的一個(gè)字節(jié)內(nèi)容放入 char 類型的變量中,所以其實(shí)最終 c 變量里放的只是一個(gè) 'd' 字符!

但是我不推薦上面這種寫法?。?!我們明白其中道理就好。

那這里有的小伙伴又開始下去實(shí)驗(yàn)了,于是寫出了這樣的代碼:

因?yàn)橐粋€(gè)整型字符常量只有 4 個(gè)字節(jié)空間,他如何能放得下 5個(gè)字節(jié)甚至更多呢?

3.2 特殊情況

顯而易見,是不能出現(xiàn)空整型字符常量的,但是可以出現(xiàn)空字符串,因?yàn)樽址Y(jié)束標(biāo)識(shí)符 \0 雖然不能算字符串元素內(nèi)容,但是它也是占大小的。

4、邏輯操作符

4.1 && (邏輯與)

概念:級(jí)聯(lián)兩個(gè)(多個(gè))邏輯表達(dá)式,必須同時(shí)為真,結(jié)果才為真。

例子:

對(duì)于邏輯與的短路現(xiàn)象,因?yàn)槲覀兙幾g器是從左往右掃描的,所以如果當(dāng)表達(dá)式左邊為假的話,它就不會(huì)去執(zhí)行邏輯與右邊的表達(dá)式,這也就是我們所稱的短路現(xiàn)象:

4.2 || (邏輯或)

概念:級(jí)聯(lián)兩個(gè)(多個(gè))邏輯表達(dá)式,必須至少一個(gè)為真,結(jié)果才為真。

例子:

上面這個(gè)例子同時(shí)也包含了邏輯或的短路現(xiàn)象,在邏輯或中,因?yàn)榫幾g器是從左往右掃描代碼的,所以只要表達(dá)式左邊為真,則不需要進(jìn)行右邊的判斷。

4.3 邏輯與和邏輯或的筆試題

因?yàn)閷?duì)于前置++和后置++我還沒(méi)有講,所以有基礎(chǔ)的同學(xué)可以先看看,沒(méi)基礎(chǔ)的可以等我下期出了符號(hào)第二期在回來(lái)看這道題。

第一個(gè)邏輯與表達(dá)式,a 變量的初始值是 0 ,而且是后置++,先使用表達(dá)式的值,在進(jìn)行自增,而邏輯與必須滿足表達(dá)式兩邊的值都為真,但凡有一個(gè)為假都不會(huì)執(zhí)行后面的表達(dá)式,所以只有 a 變量發(fā)生了變化。第二個(gè)邏輯或表達(dá)式,邏輯或只要表達(dá)式兩邊有一個(gè)為真即可,a++ 判斷為假,會(huì)接著判斷 ++b, 前置++ 是先自增在使用,所以 ++b 表達(dá)式為真,也就不會(huì)去執(zhí)行后面表達(dá)式了,也就是說(shuō),只有 a和b變量的值發(fā)生了變化。

到此這篇關(guān)于C語(yǔ)言各種符號(hào)的使用介紹上篇的文章就介紹到這了,更多相關(guān)C語(yǔ)言符號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論