欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言各種符號的使用介紹上篇

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

1、注釋符號

1.1 注釋的基本注意事項

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

這段代碼,哪一行是有問題的呢?

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

最終我們可以得出這樣一個結論:注釋被替換本質上是被替換成空格!

這里我們要再提一個簡單的點,C語言注釋無法被嵌套,/* 總是與最近的 */ 匹配,感興趣的小伙伴可以去測試下:

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

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

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

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

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

把 *p 用括號括起來: ret = y / (*p);

推薦第二種,因為看起來會更直觀

1.2 如何寫出好的注釋

[ 建議1 ] 注釋應該準確易懂,不能有爭議性,錯誤的注釋反而有害。

[ 建議2 ] 要保證注釋與代碼的一致性,沒用的注釋及時刪除。

[ 建議3 ] 對于全局數(shù)據 (全局變量、常量定義)必須要加注釋。

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

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

[ 建議6 ] 當代碼比較長,特別是有多重其那套時,應當在一些段落的結束處加注釋。

[ 建議7 ] 注釋的縮進要與代碼的縮進一致。

[ 建議8 ] 注釋代碼應當注重,“ 為何做 ” ,而不是 “ 怎么做 ”。

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

[ 建議10 ] 復雜的函數(shù)中,在分支語句、循環(huán)語句結束之后需要適當?shù)淖⑨?,方便區(qū)分各個分支或循環(huán)體。

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

2.1 續(xù)行功能

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

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;
}

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

2.2 轉義字符

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

\ 有兩種用途:

  1. 當續(xù)行符使用
  2. 轉義字符使用 (a. 字面轉特殊 b. 特殊轉字面)

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

換行:讓光標移動到下一行

回車:光標回到當前行的最開始

這里小伙伴可以試一下用C語言寫一個簡單的倒計時功能,就能很明顯的區(qū)分換行和回車的區(qū)別了!

這里我們也可以來看一道筆試題:

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

這里第一個打印函數(shù),我們如果有了解,strlen() 函數(shù)是求字符串中 \0 之前的字符個數(shù),所以第一個打印的是 6 , 第二個打印函數(shù),首先是 \t 被解析成一個轉義字符, \62 也被解析成一個轉義字符 (8進制) 所以第二個打印的應該是 14 !

3、單引號和雙引號

3.1 基本概念

對于C語言有了解的小伙伴都知道,單引號引起來的都是字符常量,雙引號引起來的都是字符串常量,但其實對于初學者來說還是容易出錯,比如 'a',和 "a" 是完全不一樣的概念,在字符串中,以 \0 為結尾,他本質上不屬于字符串的元素內容,只能說他是字符串結束標識符,但是它會占用空間!也就是 'a' 會占一個字節(jié)而 "a",則會占兩個字節(jié)。

有了上面簡單的概念我們來看一個例子:

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

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

光是用 “ 標準規(guī)定 ” 用來證明是不可行的,我們再用一個實例來證明:

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

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

那這里有的小伙伴又開始下去實驗了,于是寫出了這樣的代碼:

因為一個整型字符常量只有 4 個字節(jié)空間,他如何能放得下 5個字節(jié)甚至更多呢?

3.2 特殊情況

顯而易見,是不能出現(xiàn)空整型字符常量的,但是可以出現(xiàn)空字符串,因為字符串結束標識符 \0 雖然不能算字符串元素內容,但是它也是占大小的。

4、邏輯操作符

4.1 && (邏輯與)

概念:級聯(lián)兩個(多個)邏輯表達式,必須同時為真,結果才為真。

例子:

對于邏輯與的短路現(xiàn)象,因為我們編譯器是從左往右掃描的,所以如果當表達式左邊為假的話,它就不會去執(zhí)行邏輯與右邊的表達式,這也就是我們所稱的短路現(xiàn)象:

4.2 || (邏輯或)

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

例子:

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

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

因為對于前置++和后置++我還沒有講,所以有基礎的同學可以先看看,沒基礎的可以等我下期出了符號第二期在回來看這道題。

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

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

相關文章

  • C++實現(xiàn)簡單計算器功能

    C++實現(xiàn)簡單計算器功能

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 解析為何要關閉數(shù)據庫連接,可不可以不關閉的問題詳解

    解析為何要關閉數(shù)據庫連接,可不可以不關閉的問題詳解

    本篇文章是對為何要關閉數(shù)據庫連接,可不可以不關閉的問題進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 隨機數(shù)字去掉重復和排序的方法

    隨機數(shù)字去掉重復和排序的方法

    用計算機隨機生成了N個0到1000000000(包含0和1000000000)之間的隨機整數(shù)(N≤5000000),對于其中重復的數(shù)字,只保留一個,把其余相同的數(shù)去掉。然后再把這些數(shù)從小到大排序。
    2013-03-03
  • C++實現(xiàn)四則混合運算計算器

    C++實現(xiàn)四則混合運算計算器

    這篇文章主要為大家詳細介紹了C++實現(xiàn)四則混合運算計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++實現(xiàn)圖書管理系統(tǒng)最新版

    C++實現(xiàn)圖書管理系統(tǒng)最新版

    這篇文章主要為大家詳細介紹了C++實現(xiàn)圖書管理系統(tǒng)最新版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • strcat函數(shù)與strncat函數(shù)的深入分析

    strcat函數(shù)與strncat函數(shù)的深入分析

    本篇文章是對strcat函數(shù)與strncat函數(shù)進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實現(xiàn)基于最大堆和最小堆的堆排序算法示例

    C語言實現(xiàn)基于最大堆和最小堆的堆排序算法示例

    這篇文章主要介紹了C語言實現(xiàn)基于最大堆和最小堆的堆排序算法示例,分別是基于最大堆的升序排序和基于最小堆的降序排序實例,需要的朋友可以參考下
    2016-06-06
  • C語言實現(xiàn)歌曲信息管理系統(tǒng)

    C語言實現(xiàn)歌曲信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)歌曲信息管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • vscode分享代碼插件Polacode介紹

    vscode分享代碼插件Polacode介紹

    這篇文章主要介紹了vscode分享代碼插件Polacode的相關知識,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C++卸載程序功能示例

    C++卸載程序功能示例

    用C++寫一個自己的卸載程序來完成程序的卸載工作,同時運行后要刪除卸載程序本身,并刪除卸載程序所在的文件夾
    2013-11-11

最新評論