C語(yǔ)言細(xì)節(jié)

機(jī)器數(shù)审胚,真值恕沫,原碼强重,補(bǔ)碼和反碼

1. 機(jī)器數(shù)和真值

計(jì)算機(jī)常用最高位表示一個(gè)有符號(hào)數(shù)的正負(fù)绞呈,例如-1機(jī)器數(shù)10000001(字長(zhǎng)8bit)贸人。10000001真值就是-1而不是129

2. 原碼佃声,補(bǔ)碼和反碼

[+1] = [00000001]原 = [00000001]反 = [00000001]補(bǔ)
[ -1] = [10000001]原 = [11111110]反 = [1111 1111]補(bǔ)
原理待補(bǔ)充

變量

類型限定詞 const 和 volatile

八進(jìn)制數(shù)以0開(kāi)頭 十六進(jìn)制數(shù)以0x或者0X開(kāi)頭艺智。

整型常量后綴分為無(wú)符號(hào)型后綴(u或者U)和長(zhǎng)型后綴(l或者L)兩類,兩個(gè)l可以表示long long圾亏。

c語(yǔ)言中十拣,浮點(diǎn)數(shù)只采用十進(jìn)制。
浮點(diǎn)數(shù)常量的兩種表示形式:小數(shù)形式和指數(shù)形式
%f輸出小數(shù)形式:小數(shù)點(diǎn)常量必須要有.志鹃。.前或者.后面至少要有一邊又?jǐn)?shù)字夭问,即12..12都是允許的。
%e%E輸出指數(shù)形式:e后面的數(shù)必須為整數(shù)弄跌。
浮點(diǎn)常量默認(rèn)都bouble類型,加上后綴l表示long double尝苇,后綴f表示float
%g輸出%f%e中寬度較短的那個(gè)

'\N''\xN'
\N表示八進(jìn)制值為N的ASCII字符
\xN表示十六進(jìn)制值為N的ASCII字符
例如\116\x4e都表示字符N

'a'占一個(gè)byte铛只,"a"占兩個(gè)byte

計(jì)算誤差

上溢(超出可表示范圍)
下溢(浮點(diǎn)數(shù))
可表示誤差(計(jì)算機(jī)無(wú)法計(jì)算無(wú)限位數(shù)導(dǎo)致的誤差)

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

可表示誤差:float保證7位有效,double保證14位有效糠溜。(包含整數(shù)部分)
上溢:

#include<stdio.h>

int main(){
    float a = 1.;
    for(int i=1; i<=35; i++){
        a *= i;
        printf("%g\n", a);
    }
    return 0;
}

在這種情況下淳玩,最后一條輸出是1.#INF,把a(bǔ)的類型從float改成double的話i的最大值可以取到171才會(huì)再出現(xiàn)1.#INF非竿。
下溢:

#include<stdio.h>

int main(){
    float a = 1.;
    for(int i=1; i<=47; i++){
        a /= 10;
        printf("%g\n", a);
    }
    return 0;
}
image.png

符號(hào)位擴(kuò)展
強(qiáng)制類型轉(zhuǎn)換時(shí)遵守轉(zhuǎn)換前后值相等蜕着。

char c = '\376';
short int a = c;
運(yùn)算符優(yōu)先

單目運(yùn)算符,賦值運(yùn)算符和條件(三目)運(yùn)算符是從右往做結(jié)合的红柱。
因此表達(dá)式a+=a-=4先計(jì)算a-=4再計(jì)算a+=

程序

1. goto語(yǔ)句

goto語(yǔ)句是無(wú)條件跳轉(zhuǎn)語(yǔ)句承匣,格式:

goto  lable;  /*lable為語(yǔ)句標(biāo)號(hào)*/
/* statements */
lable:   statements;
2.fflush(stdin)

清空標(biāo)準(zhǔn)流緩沖區(qū)

3. getch()getche()

使用他們必須包含控制臺(tái)輸入輸出庫(kù)函數(shù)# include<conio.h>中,無(wú)緩沖模式 ,其中gethce()是get character and echo的縮寫锤悄,一輸入就立刻回顯到屏幕上韧骗。

4.輸出

類型 效果
%o%x%X 八進(jìn)制 十六進(jìn)制(字母大小寫的區(qū)別)
%h short型
%l%u 長(zhǎng)型 無(wú)符號(hào)型
%a.bf 最小寬域a,精度b的float型
%a.bs 最小寬域a零聚,最多輸入b個(gè)字符的字符串
%n 不輸出袍暴,把已打印的字符個(gè)數(shù)存到變量(范例如下)
int a;
char s[] = "astring";
printf("%s%n", s, &a);
printf("%d", a);  //輸出為7
return 0;

5.輸入

類型 效果
%o%x%X 八進(jìn)制 十六進(jìn)制(字母大小寫的區(qū)別)
%p 讀入一個(gè)指針
%u 無(wú)符號(hào)型
%<字符串>d 控制串中的非空白字符,輸入時(shí)必須要打這串字符串
%as 域長(zhǎng)說(shuō)明符隶症,最多讀入a為字符串
%*c 忽略這項(xiàng)輸入
%n 把已讀入的字符個(gè)數(shù)存到變量
%[字符串] 掃描合集政模,輸入掃描合計(jì)中的字符。

6.標(biāo)識(shí)符作用域和可視化和存儲(chǔ)類別

標(biāo)識(shí)符的儲(chǔ)存類別決定它的儲(chǔ)存周期和鏈接蚂会。

儲(chǔ)存周期

  1. 自動(dòng)存儲(chǔ)器: 局部變量的缺省存儲(chǔ)類別淋样。程序塊運(yùn)行結(jié)束后所分配的內(nèi)存單元被釋放收回,再次進(jìn)入時(shí)重新分配胁住。
  2. 靜態(tài)存儲(chǔ)器: 在程序結(jié)束前一直存在习蓬,但是能否訪問(wèn)則受到作用域的限制纽什。靜態(tài)存儲(chǔ)器變量初始值被系統(tǒng)自動(dòng)定義為0。

鏈接
針對(duì)多源文件程序而言躲叼。包括:

  1. 外部鏈接 :在構(gòu)成程序的所有文件可識(shí)別
  2. 內(nèi)部鏈接:在定義它的整個(gè)文件可識(shí)別
  3. 無(wú)鏈接:在作用域可識(shí)別

儲(chǔ)存類別

  1. auto (自動(dòng)存儲(chǔ)器)
    顯示地聲明具有自動(dòng)存儲(chǔ)器的變量芦缰。由于局部變量在沒(méi)有聲明任何存儲(chǔ)類別情況下,默認(rèn)為自動(dòng)變量枫慷,所以可以刪除關(guān)鍵字auto让蕾。
  2. register (自動(dòng)存儲(chǔ)器)
    即寄存器變量,寄存器變量必須是自動(dòng)變量或听,也就是說(shuō)該關(guān)鍵詞只能在局部變量和形參之前探孝。寄存器處理比內(nèi)存快,但空間有限誉裆。
  3. static (靜態(tài)存儲(chǔ)器)
    static對(duì)于局部變量和全局變量的處理方法不同顿颅。
    1)靜態(tài)局部變量
    理解:“靜態(tài)”意味著具有全局存儲(chǔ)周期,“局部”意味著只有在作用域具有可視性足丢,靜態(tài)存儲(chǔ)器變量被系統(tǒng)初始化為零
    以下代碼輸出為1234粱腻。如果去掉static則輸出1111。
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
void increase();

int main(){
   increase();
   increase();
   increase();
   increase();
   system("pause");
   return 0;
}

void increase(){
   static int a; 
   printf("%d", ++a);
}

2)全局變量
由于全局變量本身就具有靜態(tài)存儲(chǔ)期斩跌,再用static修飾它是將他設(shè)置為內(nèi)部鏈接绍些,即只能在本文件內(nèi)訪問(wèn)它。

  1. extern (靜態(tài)存儲(chǔ)器)
    主要是聲明程序其他地方用外部鏈接定義的對(duì)象耀鸦,即必須是全局變量柬批,因?yàn)槿肿兞坎啪哂型獠挎溄印S胑xtern聲明的對(duì)象要么在程序后面定義要么在其他文件中定義
編譯預(yù)處理
  1. 宏(注意括號(hào)的運(yùn)用)
    1)不帶參數(shù)的宏
    #define 宏名字 <宏體>
    源程序中只有與宏名字相同的標(biāo)識(shí)符才被替換
    例如以下程序輸出為
    PI = 3.140000
#define PI 3.14
   printf("PI = %f", PI);
   system("pause");
   return 0;

2)類函數(shù)宏
#define 宏名字(參數(shù)表) <宏體>

3)取消定義宏
#undef 宏名字

算法的描述

  1. 程序流程圖
  2. NS盒圖
  3. PAD圖
  4. 偽代碼

數(shù)組和字符串

  1. 通過(guò)scanf("%ns", s)控制輸入字符串字符最大數(shù)量袖订。

字符串函數(shù)#include <string.h>

  1. strcpy(str1, str2)
    1.5 strncpy(str1, str2, n)
  2. strcat(str1, str2)
  3. strlen(str)
  4. strcmp(str1, str2)
二維數(shù)組的初始化
   int a[3][3] = {
      {1, 2}, {4, 5, 6}, {7, 8, 9}
   }; // 初始按順序是 1 2 0 4 5 6 7 8 9
int a[3][3] = {
      {1, 2, 3}, {4, 5, 6, 7}, {7, 8}
   };// 會(huì)報(bào)錯(cuò),程序無(wú)法運(yùn)行

第一維可以省略氮帐,第二維不能省略

指針

1. 動(dòng)態(tài)分配函數(shù)
1)void *malloc(size_t size)
用法案例:

int *p;
   p = (int *)malloc(10*sizeof(int));
   if(!p){
      printf("false to malloc!");
      exit(1);
   }

2)free()
注意不要對(duì)無(wú)效指針調(diào)用free(),否則會(huì)破壞自由表
指針可以比較大小洛姑,但必須種類相同且對(duì)象相同比如同一個(gè)數(shù)組

關(guān)于多級(jí)指針和數(shù)組的理解

s是二維數(shù)組揪漩,數(shù)組名s是指向數(shù)組的指針,因此只能用數(shù)組指針pt1賦值吏口。
a是指針數(shù)組奄容,數(shù)組名a是指向指針的指針,因此只能用二級(jí)指針pt2賦值产徊。
思考一下a+1和s+1的區(qū)別就能明白為啥不能劃等號(hào)了


指針和數(shù)組

結(jié)構(gòu)昂勒,聯(lián)合,枚舉和typedef

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舟铜,一起剝皮案震驚了整個(gè)濱河市戈盈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖塘娶,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件归斤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡刁岸,警方通過(guò)查閱死者的電腦和手機(jī)脏里,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)虹曙,“玉大人迫横,你說(shuō)我怎么就攤上這事≡吞迹” “怎么了矾踱?”我有些...
    開(kāi)封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)疏哗。 經(jīng)常有香客問(wèn)我呛讲,道長(zhǎng),這世上最難降的妖魔是什么返奉? 我笑而不...
    開(kāi)封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任贝搁,我火速辦了婚禮,結(jié)果婚禮上衡瓶,老公的妹妹穿的比我還像新娘徘公。我一直安慰自己牲证,他們只是感情好哮针,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著坦袍,像睡著了一般十厢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捂齐,一...
    開(kāi)封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天蛮放,我揣著相機(jī)與錄音,去河邊找鬼奠宜。 笑死包颁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的压真。 我是一名探鬼主播娩嚼,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼滴肿!你這毒婦竟也來(lái)了岳悟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贵少,沒(méi)想到半個(gè)月后呵俏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滔灶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年普碎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宽气。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡随常,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萄涯,到底是詐尸還是另有隱情绪氛,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布涝影,位于F島的核電站枣察,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏燃逻。R本人自食惡果不足惜序目,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伯襟。 院中可真熱鬧猿涨,春花似錦、人聲如沸姆怪。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)稽揭。三九已至俺附,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溪掀,已是汗流浹背事镣。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揪胃,地道東北人璃哟。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像喊递,于是被迫代替她去往敵國(guó)和親随闪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 就說(shuō)三個(gè)吧,說(shuō)三個(gè)故事吧!故事要從第一個(gè)開(kāi)始盛杰。 第一打工 初中的時(shí)候 2009年挽荡,我才14那年...
    A李沖閱讀 359評(píng)論 1 1
  • “北師珠秒變重本”,這個(gè)消息引起吃瓜群眾熱議驱证,我本來(lái)是不想說(shuō)什么的延窜,因?yàn)槲业男膽B(tài)是酸酸的。 但是無(wú)意間看到這件事情...
    溫溫恭人_閱讀 3,199評(píng)論 0 1
  • 我們終其一生抹锄,都在尋找著內(nèi)心所向往的完美之境逆瑞。令人遺憾的是,時(shí)間的長(zhǎng)河總是會(huì)造成世間各式各樣的不完美。
    唐潔工坊閱讀 93評(píng)論 0 0
  • 時(shí)間過(guò)多浪費(fèi)于哪里。 手機(jī)膜宋。 尤其是瀏覽于網(wǎng)購(gòu)App。若是買了什么物件還好念秧,無(wú)非是偶爾看看是否發(fā)了貨、貨物到?jīng)]到目...
    Chleese閱讀 380評(píng)論 0 0