C語言01- 整數(shù)、浮點、數(shù)據(jù)類型、變量、stdio

1.0:Hello World

2.0:整數(shù)

//C語言:
//16進(jìn)制 0x71ed
//8進(jìn)制:0125
//二進(jìn)制:1010101(C語言并沒有單獨(dú)的二進(jìn)制表示方法。前面這個數(shù)表示十進(jìn)制)
//十進(jìn)制:100

//匯編語言:
//16進(jìn)制:1aH
//8進(jìn)制:17O
//十進(jìn)制:12D
//二進(jìn)制:101B

//十六進(jìn)制好處,可以直接觀察這個數(shù)在內(nèi)存中每個字節(jié)的內(nèi)容

//原碼,反碼,補(bǔ)碼
//負(fù)數(shù)的補(bǔ)碼:負(fù)數(shù)的絕對值的原碼取反加一
//負(fù)數(shù)的原碼:負(fù)數(shù)的補(bǔ)碼取反加一得到負(fù)數(shù)絕對值的原碼,高位變?yōu)?

//低位優(yōu)先:低位首先存在低地址
//高位優(yōu)先:高位首先存在高地址

都知道第一位表示的是正負(fù)符號 則:0000 0000表示的是0; 0111 1111表示的是127,這樣正數(shù)0-127就表示完了。輪到表示負(fù)數(shù)了,負(fù)數(shù)第一位為1(規(guī)定的) 則:1000 0001表示的是-11111 1111表示的是-127,這樣負(fù)數(shù)就有-1到-127發(fā)現(xiàn)負(fù)數(shù)好像還有一個1000 0000,表示0?正數(shù)已經(jīng)有了,那就表示-128吧,不浪費(fèi)。你把 1000 0000補(bǔ)碼一下就是 1000 0000

原碼
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值. 比如如果是8位二進(jìn)制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001

反碼的表示方法是:
正數(shù)的反碼是其本身
負(fù)數(shù)的反碼是在其原碼的基礎(chǔ)上, 符號位不變,其余各個位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反

補(bǔ)碼的表示方法是:
正數(shù)的補(bǔ)碼就是其本身
負(fù)數(shù)的補(bǔ)碼是在其原碼的基礎(chǔ)上, 符號位不變, 其余各位取反, 最后+1. (即在反碼的基礎(chǔ)上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補(bǔ)
[-1] = [10000001]原 = [11111110]反 = [11111111]補(bǔ)

----------------------------------
為了解決原碼做減法的問題, 出現(xiàn)了反碼:
計算十進(jìn)制的表達(dá)式: 1-1=0
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

發(fā)現(xiàn)用反碼計算減法, 結(jié)果的真值部分是正確的. 而唯一的問題其實就出現(xiàn)在"0"這個特殊的數(shù)值上. 雖然人們理解上+0和-0是一樣的, 但是0帶符號是沒有任何意義的. 而且會有[0000 0000]原和[1000 0000]原兩個編碼表示0.

于是補(bǔ)碼的出現(xiàn), 解決了0的符號以及兩個編碼的問題:
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]補(bǔ) + [1111 1111]補(bǔ) = [0000 0000]補(bǔ)=[0000 0000]原

這樣0用[0000 0000]表示, 而以前出現(xiàn)問題的-0則不存在了.而且可以用[1000 0000]表示-128:
(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]補(bǔ) + [1000 0001]補(bǔ) = [1000 0000]補(bǔ)

    -1-127的結(jié)果應(yīng)該是-128, 在用補(bǔ)碼運(yùn)算的結(jié)果中, [1000 0000]補(bǔ) 就是-128. 但是注意因為實際上是使用以前的-0的補(bǔ)碼來表示-128, 所以-128并沒有原碼和反碼表示.(對-128的補(bǔ)碼表示[1000 0000]補(bǔ)算出來的原碼是[0000 0000]原, 這是不正確的)
    使用補(bǔ)碼, 不僅僅修復(fù)了0的符號以及存在兩個編碼的問題, 而且還能夠多表示一個最低數(shù). 這就是為什么8位二進(jìn)制, 使用原碼或反碼表示的范圍為[-127, +127], 而使用補(bǔ)碼表示的范圍為[-128, 127].
    因為機(jī)器使用補(bǔ)碼, 所以對于編程中常用到的32位int類型, 可以表示范圍是: [-2^31, 23^1-1] 因為第一位表示的是符號位.而使用補(bǔ)碼表示時又可以多保存一個最小值.

3.0:浮點數(shù)

3.1:浮點數(shù)定義和存儲

C語言中浮點數(shù)的定義:
1. 單精度浮點數(shù):float,4個字節(jié)
2. 雙精度浮點數(shù):double,8個字節(jié)

float x = 1.723f;//加入f代表單精度浮點數(shù)

浮點數(shù)是將特定長度的連續(xù)字節(jié)(4個字節(jié)和8個字節(jié))的所有二進(jìn)制位(32位和64位)分割為特定寬度的三個域:

  1. 符號域:S,占1位,正數(shù)為0,負(fù)數(shù)為1
  2. 階碼域:E,占8位或者11位,E=e+127(float) or e+1023(double),指數(shù)e 有正負(fù)既有符號數(shù),但階碼為正即無符號數(shù),所以將e加上127或者1023作為偏移,方便指數(shù)的比較。
  3. 尾數(shù)域:M,占23位或者52位
  4. 計算浮點數(shù)的存儲方式,只需要依次求出1位符號位,8位或11位的階碼,以及23位或者52位的尾數(shù)即可。
  5. 公式:V=(-1)^s *M *2e=(-1)s *M *2^(E-127)/(E-1023)

浮點數(shù)在X86系統(tǒng)以低位優(yōu)先方式處處

image.png

4.0:數(shù)據(jù)類型

C語言是一個強(qiáng)類型語言,數(shù)據(jù)必須明確指定類型。

4.1:內(nèi)建型別

  1. 字符類型:char(ASCII編碼,1)/wchar_t(Unicode編碼,與平臺有關(guān),windows平臺2個字節(jié),unix平臺4個字節(jié))
  2. 整型:short(2)/int(4)/long(與平臺有關(guān),windows平臺4個字節(jié),unix平臺32位4個字節(jié),64位8個)/long long(Linux中用的多,C語言標(biāo)準(zhǔn)沒有此類型,是linux中的一個擴(kuò)展)/_int64(C語言標(biāo)準(zhǔn)沒有此類型,Windows中的一個擴(kuò)展)
  3. 實數(shù)單精度:float(4)
  4. 實數(shù)雙精度:double(8)
  5. 有符號和無符號:signed/unsigned,(signed)int/unsigned int
  6. 布爾類型:bool,0/1(true/false)C99<stdbool.h>;在之前的C99中沒有bool類型需要自己定義
typedef int bool;
#define true 1
#define false 0

char gender = 'M';//ASCII字符
wchar_t sex = L'F'//加L表示UNICODE字符,Windows平臺使用的Unicode32位編碼,占用2個字節(jié);Linux平臺使用的Unicode64編碼,占用4個字節(jié)

char name[16]="tom";
wchar_t nick[16]=L"Jack";//加L表示UNICODE字符,Windows平臺使用的Unicode32位編碼,每個字符占用2個字節(jié);Linux平臺使用的Unicode64編碼,每個字符占用4個字節(jié)

sizeof(char) = 1;
sizeof(wchar_t) = 2或者4;//認(rèn)清字符數(shù)與字節(jié)數(shù)的區(qū)別
char c = 'a';//'a'是字符常量,c是字符常量。常量是用單引號包圍。
wchar_t wc = L'a';

short a1 = 100;
int a2 = 0x64;
long a3 = 100L;
unsigned short a4 = 100;
unsigned int a5 = 100;
unsigned long a6 = 100UL;
long long a7 = 100LL;//Linux
_int64 a8 = 100i64;//Windows
 

unsigned char/signed char,只寫char,由編譯器決定是有符號無符號

內(nèi)建型別:數(shù)據(jù)以字節(jié)為單位存儲在內(nèi)存中

大寫A的ASCII值為65,小寫a的ASCII值為97,相差32。在程序中是個硬編碼,不要使用,用'a'-'A'替代
image

Unicode4編碼具體實現(xiàn)有Utf-8(字符占用的字節(jié)可以從1到4個),Utf-16(2),Uft-32(4);
網(wǎng)頁通常采用Utf-8編碼,可以加快瀏覽速度。

C語言中的類型,可以通過typedef定義成新的類型。比如下面的例子:

typedef int INT
typedef unsigned int UINT
typedef unsigned short USHORT
typedef char CHAR
typedef unsigned long ULONG
typedef usigned short WORD
typedef unsigned int DWORD
typedef char CHAR

4.2:類型長度與取值范圍

sizeof計算類型或者變量的長度,字節(jié)為單位,是操作符,不是函數(shù)。在編譯階段確定,而不是運(yùn)行階段。
注意

sizeof(char)的長度為:1
sizeof(wchar_t):2或4
sizeof(short)的長度為:2
sizeof(int)的長度為:4
sizeof(long)的長度為:4(Win X86和X64都為4,Linux X86為4,X64為8)
sizeof(float)的長度為:4
sizeof(double)的長度為:8
sizeof(bool)的長度為:1(C++里)
sizeof(BOOL)的長度為:4(windows平臺)

類型 有符號 無符號
char [-128, 127] [0, 255]
short [-32768, 32767] [0, 65535]
int/long [-2147483648, 2147483647] [0, 4294967295]
float [-3.4*10^38, 3.4*10^38]
double [-1.7*10^308, 1.7*10^308]

有符號最小值:除了1之外,其他位都為0

整數(shù)溢出之后發(fā)生什么呢? (char)(-128*-1)

整數(shù)上溢出1:最小值;下溢出1:最大值
以一個字節(jié)為例子:
有符號:[-128, 127]; 127+1->-128; -128-1->127
無符號:[0, 255]; 255+1->0; 0-1->255

4.3:類型轉(zhuǎn)換

  1. 類型轉(zhuǎn)換:將一種類型轉(zhuǎn)換為另一種類型,一種類型指針轉(zhuǎn)為另一種類型指針。
  2. 強(qiáng)制轉(zhuǎn)換:(新類型)變量
char c  =‘a(chǎn)’;
short i = (short)c;
int a = (int)i;
long b = (long)a;
float c = (float)b;
double d = (double)c;

上面的轉(zhuǎn)換都是從寬度短的轉(zhuǎn)換為寬度大的。當(dāng)把一個寬度短的數(shù)據(jù)類型到寬度大的數(shù)據(jù)類型轉(zhuǎn)換的時候,是用符號位填充多出的位數(shù)。

類型 原1字節(jié)數(shù) 轉(zhuǎn)換為2字節(jié)數(shù)
正數(shù) 00110101 00000000 00110101
負(fù)數(shù) 10110100 11111111 10110100

下面的例子是把寬度長的轉(zhuǎn)換為寬度短的,這個過程可能會造成數(shù)據(jù)的丟失:

int x = 0x12345678;
short y = (short)x;

當(dāng)把占4個字節(jié)的x強(qiáng)轉(zhuǎn)為占2個字節(jié)的y的時候,整數(shù)的高位2個字節(jié)將會被截斷因此,y只保留了0x12345678中的低位2個字節(jié)0x5678。


浮點數(shù)到整數(shù)

int i = (int)3.15;//不是四舍五入,取整

如果一個運(yùn)算符兩邊的運(yùn)算數(shù)類型不同,先要將其轉(zhuǎn)換為相同的類型,即較低類型轉(zhuǎn)換為較高類型,然后再參加運(yùn)算,轉(zhuǎn)換規(guī)則如圖所示。

image

5:變量

常量,顧名思義,就是其值不會改變的數(shù)據(jù),就是不同數(shù)據(jù)類型中不變的值。

變量,內(nèi)存或寄存器中用一個標(biāo)識符命名的存儲單元,可以用來存儲一個特定類型的數(shù)據(jù),并且數(shù)據(jù)的值在程序運(yùn)行過程中可以進(jìn)行修改。

5.1:變量定義與命名

程序員一旦定義了變量,那么,變量就至少可為我們提供兩個信息:一是變量的地址,即就是,操作系統(tǒng)為變量在內(nèi)存中分配的若干內(nèi)存的首地址;二是變量的值,也就是,變量在內(nèi)存中所分配的那些內(nèi)存單元中所存放的數(shù)據(jù)。

int a = 10;
a=100;
printf(“addr:%p,value:%d\n”, &a,a);

由于程序的多樣需要,我們對變量也有各種各樣的要求,比如:

  1. 變量的生命期
  2. 變量的初始狀態(tài)
  3. 變量的有效區(qū)域
  4. 變量的開辟地
  5. 變量的開辟區(qū)域的大小

C語言設(shè)置了以下變量:

  1. 不同數(shù)據(jù)類型的變量;如:char cHar, int iTimes, float faverage;
  2. 全局變量;
  3. 局部變量;
  4. 靜態(tài)變量:靜態(tài)全局變量和靜態(tài)局部變量;關(guān)鍵詞:static
  5. 寄存器變量:關(guān)鍵詞:register;
  6. 外部變量:關(guān)鍵詞:extern;

在函數(shù)內(nèi)部說明的變量為局部變量,只有在函數(shù)執(zhí)行時,局部變量才存在,當(dāng)函數(shù)執(zhí)行完退出后,局部變量隨之消失。也就是,當(dāng)函數(shù)執(zhí)行完退出后,原先在函數(shù)內(nèi)定義的變量現(xiàn)在不能用。

與局部變量不同,全局變量在整個程序都是可見的,可在整個程序運(yùn)行過程中,對于任何一個程序都是可用的。全局變量的說明的位置在所有函數(shù)之外,但可被任何一個函數(shù)使用,讀取或者寫入。

靜態(tài)變量是分配在存儲器中C程序所占據(jù)的數(shù)據(jù)段內(nèi),C程序運(yùn)行的整個過程中一直保留,不會被別的變量占用。靜態(tài)變量可以定義成全局變量或局部變量,當(dāng)定義為全局變量時,在它定義的程序的整個運(yùn)行期間均存在并且保持原來的存儲單元位置不會改變

同靜態(tài)全局變量定義一樣,當(dāng)在局部變量名前加靜態(tài)變量說明符static,該變量就定義為靜態(tài)局部變量。編譯器為該變量建立永久存儲單元。永久是指C程序運(yùn)行的整個過程中一直保留,不會被別的變量占用。靜態(tài)局部變量和靜態(tài)全局變量的根本區(qū)別在作用區(qū)域上,靜態(tài)局部變量只在它被說明的函數(shù)或復(fù)合語句中有效,并且在兩次函數(shù)調(diào)用期間仍然保存其值不變,即就是有記憶功能;它們的生命期是相同的,和C程序整個運(yùn)行期同在。

5.2:變量作用域存儲空間生命周期

變量的作用域:變量能夠在什么地方被訪問。

變量的存儲空間:存放變量的內(nèi)存位置。要明白變量在內(nèi)存中存放的位置,首先就先了解下系統(tǒng)的內(nèi)存布局。

PAE:physical address extension物理地址擴(kuò)展。

以x86為例,x86支持32位尋址,因此可以支持最大232=4GB的虛擬內(nèi)存空間(也可以通過PAE技術(shù)增加到36位尋址,因此可以將尋址空間擴(kuò)大到64GB)。如圖所示,在4G的虛擬地址空間中,Windows系統(tǒng)的內(nèi)存主要分為內(nèi)核空間和應(yīng)用層空間上下兩部分,每部分各占約2GB,其中還包括了一個64KB的NULL空間以及非法區(qū)域。Windows內(nèi)存的邏輯地址包含2部分,即段選擇符和偏移地址,CPU在做地址翻譯的時候,通過分段機(jī)制計算出一個線性地址,再通過頁表機(jī)制映射到物理地址以便存取物理內(nèi)存中的數(shù)據(jù)和指令。

X64(AMD64)的內(nèi)存布局與X86的內(nèi)存布局類似,不同的地方在于各自空間的范圍和大小不同,同時X64下還存在著一些空洞(hole),如圖所示。在X64內(nèi)存理論上支持最大264的尋址空間,但實際上這個空間太大了,目前根本用不完,因此實際上的X64系統(tǒng)一般都只支持到40多位(比如Windows支持44位最大尋址空間為16TB,Linux 支持48位最大尋址空間256TB等),支持的空間達(dá)到了TB級別。但是,無論是在內(nèi)核空間還是在應(yīng)用層空間,這些上TB的空間并不都是可用的,存在著所謂的空洞。

系統(tǒng)內(nèi)存布局


image

一個進(jìn)程的內(nèi)存空間布局

image

棧的大小?

Windows應(yīng)用棧默認(rèn)1M,可以用編譯指令/stack可以改設(shè)其他值;
Windows內(nèi)核棧,系統(tǒng)根據(jù)CPU架構(gòu)而定,X86系統(tǒng)上為12KB,X64系統(tǒng)為24KB,安騰系統(tǒng)為32KB
Linux內(nèi)核棧為4K或8K;應(yīng)用層10M

當(dāng)程序加載入內(nèi)存后,程序在內(nèi)存中可以分為若干個區(qū),這些區(qū)包括:靜態(tài)區(qū)(.data,.rdata,.bss段等),代碼區(qū)(.text),堆區(qū),棧區(qū)等。

內(nèi)存區(qū) 名字 用途
.text 代碼段 這個存放代碼的,用匯編角度來看就是指令。
.rdata 只讀數(shù)據(jù)段 存放常量,字符常量,const常量。(read不可修改)
.data 數(shù)據(jù)段 存放已經(jīng)初始化好的全局變量和靜態(tài)變量。
.bss 存放未初始化的全局變量和靜態(tài)變量。
.stack 棧區(qū) 存放局部變量等。棧區(qū)存放著函數(shù)調(diào)用過程中的形參,返回地址以及局部變量等。

.rdata,.data,.bss都是存放的數(shù)據(jù)。除了.bss段,.rdata,.data段的值都是在編譯的時候就確定了,并且將其編譯進(jìn)了可執(zhí)行文件,經(jīng)過反匯編都能找得到。bss段是在代碼運(yùn)行的時候手動編寫匯編代碼將其初始化為0的(這就是未初始化的全局和靜態(tài)變量默認(rèn)值為0的根源)


變量的生命周期變量有效的時間段,只有在變量的生命周期內(nèi),才能訪問該變量。有的變量的生命周期是函數(shù)運(yùn)行期間,函數(shù)結(jié)束,變量就消失了。有的變量的生命周期是程序運(yùn)行期間,只要程序還未結(jié)束,變量就不會消失或銷毀。

變量分類:全局變量,局部變量,靜態(tài)變量(靜態(tài)全局變量和靜態(tài)局部變量),寄存器變量,外部變量。

變量 作用域 存儲空間 生命周期
全局變量 靜態(tài)區(qū)(.data存放初始化全局變量,.bss存放未初始化全局變量) 整個程序 程序運(yùn)行期間
全局靜態(tài)變量 靜態(tài)區(qū)(.data存放初始化全局變量,.bss存放未初始化全局變量) 當(dāng)前源文件 運(yùn)行期間
局部變量 當(dāng)前函數(shù)內(nèi)部 函數(shù)執(zhí)行期間
局部靜態(tài)變量 靜態(tài)區(qū) 當(dāng)前函數(shù)內(nèi)部,只初始化一次 程序運(yùn)行期間
寄存器變量 寄存器 當(dāng)前函數(shù) 函數(shù)運(yùn)行期間

寄存器變量:不像其他變量那樣在內(nèi)存中存放數(shù)據(jù),而是在CPU的寄存器中暫存數(shù)據(jù),使用寄存器變量比使用內(nèi)存變量的操作速度快得多。只有整型和字符型變量可定義為寄存器變量。由于CPU中寄存器有限,盡量減少使用數(shù)量和和占用時間,用完馬上釋放;不能定義為全局變量,也不能定義在結(jié)構(gòu)或者類中。

extern關(guān)鍵字:為了解決全局變量和函數(shù)的共用問題,就引入了 extern關(guān)鍵字。這樣只需在一個文件中定義全局變量和函數(shù),在另一個文件中要用到這些變量和函數(shù)時,只需將那個文件中的變量和函數(shù)說明表復(fù)制過來,在前面加上extern,告訴編譯器,這些變量和函數(shù)已經(jīng)在別的文件中定義說明。

//main.cpp
int a = 0; //全局變量; .data
char *p1; //全局變量; .bss
static int x=10; //全局靜態(tài)變量,10為常量; .data

void func(void) {
       int b; //局部變量; .stack
       char s[] = “123”; //s為局部變量, .stack ; ”123”為常量, .rdata
       char *p2; //p2為局部變量; .stack
       char *p3 = “hello, world”; //p3為局部變量,.stack ; ”hello, world”為常量, .rdata
       static int c = 0;//局部靜態(tài)變量; .data
       register int i =0;//寄存器變量;         
       p1 = (char *)malloc(128); //p1指向堆上的內(nèi)存,直到free
       p2 = (char *)malloc(256);//p2指向堆上的內(nèi)存,直到free
       free(p1);
       free(p2);
}

int main(void) {
    func();
    printf(“hello world\n”);
    return 0;
}

6:輸入輸出-stdio

scanf/printf


image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,991評論 2 374