本書全麵講述瞭C語言編程的相關概念和知識。本書適閤希望係統學習C語言的讀者,也適用於精通其他編程語言並希望進一步掌握和鞏固C編程技術的程序員。
全書共17章。**、2章學習C語言編程所需的預備知識。第3到15章介紹 瞭C語言的相關知識,包括數據類型、格式化輸入輸齣、運算符、錶達式、 流程控製語句、函數、數組和指針、字符串操作、內存管理、位操作等等, 知識內容都針對C99標準;另外,**0章強化瞭對指針的討論,**2章引入 瞭動態內存分配的概念,這些內容*加適閤讀者的需求。**6章和**7章討 論瞭C預處理器和C庫函數、**數據錶示(數據結構)方麵的內容。附錄給 齣瞭各章後麵復習題、編程練習的答案和豐富的C編程參考資料。
**章 概覽1
1.1 C語言的起源1
1.2 使用C語言的理由1
1.2.1 設計特性1
1.2.2 高效性2
1.2.3 可移植性2
1.2.4 強大的功能和靈活性2
1.2.5 麵嚮編程人員3
1.2.6 缺點3
1.3 C語言的發展方嚮3
1.4 計算機工作的基本原理4
1.5 **計算機語言和編譯器4
1.6 使用C語言的7個步驟5
1.6.1 **步:定義程序目標5
1.6.2 第2步:設計程序6
1.6.3 第3步:編寫代碼6
1.6.4 第4步:編譯6
1.6.5 第5步:運行程序6
1.6.6 第6步:測試和調試程序7
1.6.7 第7步:維護和修改程序7
1.6.8 總結7
1.7 編程機製7
1.7.1 目標代碼文件、可執行
文件和庫8
1.7.2 UNIX係統9
1.7.3 Linux係統10
1.7.4 集成開發環境(Windows
係統下)10
1.7.5 IBM PC的DOS編譯器11
1.7.6 Macintosh上的C11
1.8 語言標準11
1.8.1 **個ANSI/ISO C標準12
1.8.2 C99標準12
1.9 本書的組織結構12
1.10 本書體例13
1.10.1 字體13
1.10.2 屏幕輸齣13
1.11 總結14
1.12 復習題14
1.13 編程練習14
第2章 C語言概述15
2.1 C語言的一個簡單實例15
2.2 實例說明16
2.2.1 **遍 快速簡介16
2.2.2 第二遍 程序細節17
2.3 一個簡單程序的結構22
2.4 使程序可讀的技巧23
2.5 *進一步24
2.5.1 說明24
2.5.2 多個聲明24
2.5.3 乘法24
2.5.4 輸齣多個值25
2.6 多個函數25
2.7 調試26
2.7.1 語法錯誤26
2.7.2 語義錯誤27
2.7.3 程序狀態28
2.8 關鍵字和保留標識符28
2.9 關鍵概念29
2.10 總結29
2.11 復習題30
2.12 編程練習31
第3章 數據和C32
3.1 示例程序32
3.2 變量與常量數據34
3.3 數據:數據類型關鍵字34
3.3.1 整數類型與浮點數類型35
3.3.2 整數35
3.3.3 浮點數36
3.4 C數據類型36
3.4.1 int類型36
3.4.2 其他整數類型39
3.4.3 使用字符:char類型42
3.4.4 _Bool類型46
3.4.5 可移植的類型:inttypes.h46
3.4.6 float、double和
long double類型47
3.4.7 復數和虛數類型50
3.4.8 其他類型50
3.4.9 類型大小52
3.5 使用數據類型53
3.6 參數和易犯的錯誤54
3.7 另一個例子:轉義序列55
3.7.1 過程分析55
3.7.2 刷新輸齣56
3.8 關鍵概念56
3.9 總結56
3.10 復習題57
3.11 編程練習58
第4章 字符串和格式化輸入/輸齣60
4.1 前導程序60
4.2 字符串簡介61
4.2.1 char數組類型和空字符61
4.2.2 使用字符串62
4.2.3 strlen()函數63
4.3 常量和C預處理器64
4.3.1 const修飾符66
4.3.2 係統定義的明顯常量66
4.4 研究和利用printf()和scanf()67
4.4.1 printf()函數68
16.6.4 預定義宏463
16.6.5 #line和 #error464
16.6.6 #pragma464
16.7 內聯函數465
16.8 C庫467
16.8.1 訪問C庫467
16.8.2 參考庫描述467
16.9 數學庫468
16.10 通用工具庫471
16.10.1 exit()和atexit()函數471
16.10.2 qsort()函數472
16.11 診斷庫476
16.12 string.h庫中的memcpy()
和memmove()477
16.13 可變參數:stdarg.h478
16.14 關鍵概念480
16.15 總結481
16.16 復習題481
16.17 編程練習482
**7章 **數據錶示484
17.1 研究數據錶示484
17.2 從數組到鏈錶486
17.2.1 使用鏈錶488
17.2.2 反思491
17.3 抽象數據類型(ADT)492
17.3.1 變得抽象492
17.3.2 構造接口493
17.3.3 使用接口496
17.3.4 實現接口498
17.4 隊列ADT504
17.4.1 定義隊列抽象數據類型504
17.4.2 定義接口504
17.4.3 實現接口的數據錶示505
17.4.4 測試隊列511
17.5 用隊列進行模擬513
17.6 鏈錶與數組517
17.7 二叉搜索樹519
17.7.1 二叉樹ADT520
17.7.2 二叉搜索樹的接口520
17.7.3 二叉樹的實現522
17.7.4 **樹533
17.7.5 樹的思想536
17.8 其他說明537
17.9 關鍵概念537
17.10 總結538
17.11 復習題538
17.12 編程練習538
附錄A 復習題答案540
附錄B 參考資料570
B.1 參考資料1:參閱書籍570
B.2 參考資料2:C運算符572
B.3 參考資料3:基本類型和存儲類576
B.4 參考資料4:錶達式、語句和
程序流579
B.5 參考資料5:添加瞭C99的標準
ANSI C庫584
B.6 參考資料6:擴展的整數類型614
B.7 參考資料7:擴展的字符支持617
B.8 參考資料8:C99的數值計算增強620
B.9 參考資料9:C和C++的差彆622
4.4.2 使用printf()68
4.4.3 printf()的轉換說明修飾符70
4.4.4 轉換說明的意義73
4.4.5 使用scanf()78
4.4.6 printf()和scanf()的
*修飾符81
4.4.7 printf的用法提示82
4.5 關鍵概念83
4.6 總結83
4.7 復習題84
4.8 編程練習85
第5章 運算符、錶達式和語句87
5.1 循環簡介87
5.2 基本運算符89
5.2.1 賦值運算符:=89
5.2.2 加法運算符:+90
5.2.3 減法運算符:-90
5.2.4 符號運算符:- 和 +90
5.2.5 乘法運算符:*91
5.2.6 除法運算符:/92
5.2.7 運算符的優先級93
5.2.8 優先級和求值順序94
5.3 其他運算符95
5.3.1 sizeof運算符和size_t類型95
5.3.2 取模運算符:%96
5.3.3 增量和減量運算符:++和--97
5.3.4 減量:--100
5.3.5 優先級100
5.3.6 不要太聰明101
5.4 錶達式和語句102
5.4.1 錶達式102
5.4.2 語句102
5.4.3 復閤語句(代碼塊)104
5.5 類型轉換105
5.6 帶有參數的函數107
5.7 一個示例程序109
5.8 關鍵概念110
5.9 總結110
5.10 復習題111
5.11 編程練習113
第6章 C控製語句:循環115
6.1 再探while循環115
6.1.1 程序注解116
6.1.2 C風格的讀循環117
6.2 while語句118
6.2.1 終止while循環118
6.2.2 循環何時終止118
6.2.3 while:入口條件循環119
6.2.4 語法要點119
6.3 比較大小:使用關係運算符和
錶達式120
6.3.1 什麼是真122
6.3.2 還有什麼是真122
6.3.3 真值的問題123
6.3.4 新的_Bool類型124
6.3.5 關係運算符的優先級125
6.4 不確定循環與計數循環127
6.5 for循環128
6.6 *多賦值運算符:+=、-=、*=、
/=和%=132
6.7 逗號運算符133
6.8 退齣條件循環:do while136
6.9 選擇哪種循環138
6.10 嵌套循環138
6.10.1 程序討論139
6.10.2 嵌套變化139
6.11 數組140
6.12 使用函數返迴值的循環例子142
6.12.1 程序討論144
6.12.2 使用具有返迴值的函數144
6.13 關鍵概念145
6.14 總結145
6.15 復習題146
6.16 編程練習149
第7章 C控製語句:分支和跳轉152
7.1 if語句152
7.2 在if語句中添加else關鍵字154
7.2.1 另一個例子:介紹getchar()
和putchar()155
7.2.2 ctype.h係列字符函數157
7.2.3 多重選擇else if158
7.2.4 把else與if配對160
7.2.5 多層嵌套的if161
7.3 獲得邏輯性164
7.3.1 改變拼寫法:iso646.h頭文件166
7.3.2 優先級166
7.3.3 求值的順序166
7.3.4 範圍167
7.4 一個統計字數的程序168
7.5 條件運算符?:170
7.6 循環輔助手段:continue和break172
7.6.1 continue語句172
7.6.2 break語句174
7.7 多重選擇:switch和break175
7.7.1 使用switch語句177
7.7.2 隻讀取一行的首字符178
7.7.3 多重標簽178
7.7.4 switch和if else180
7.8 goto語句180
7.9 關鍵概念183
7.10 總結183
7.11 復習題184
7.12 編程練習186
第8章 字符輸入/輸齣和輸入確認188
8.1 單字符I/O:getchar()和
putchar()188
8.2 緩衝區189
8.3 終止鍵盤輸入190
8.3.1 文件、流和鍵盤輸入190
8.3.2 文件結尾191
8.4 重定嚮和文件192
8.5 創建一個*友好的用戶界麵196
8.5.1 使用緩衝輸入196
8.5.2 混閤輸入數字和字符198
8.6 輸入確認200
8.6.1 分析程序203
8.6.2 輸入流和數值204
8.7 菜單瀏覽204
8.7.1 任務205
8.7.2 使執行*順利205
8.7.3 混閤字符和數值輸入207
8.8 關鍵概念209
8.9 總結209
8.10 復習題210
8.11 編程練習210
第9章 函數212
9.1 函數概述212
9.1.1 編寫和使用一個簡單的函數213
9.1.2 程序分析214
9.1.3 函數參數215
9.1.4 定義帶有參數的函數:
形式參量216
9.1.5 帶參數函數的原型聲明217
9.1.6 調用帶有參數的函數:
實際參數217
9.1.7 黑盒子觀點218
9.1.8 使用return從函數中返迴
一個值218
9.1.9 函數類型221
9.2 ANSI C的函數原型221
9.2.1 産生的問題222
9.2.2 ANSI的解決方案222
9.2.3 無參數和不確定參數224
9.2.4 函數原型的優點224
9.3 遞歸224
9.3.1 遞歸的使用224
9.3.2 遞歸的基本原理226
9.3.3 尾遞歸226
9.3.4 遞歸和反嚮計算228
9.3.5 遞歸的優缺點229
9.4 多源代碼文件程序的編譯230
9.4.1 UNIX230
9.4.2 Linux230
9.4.3 DOS命令行編譯器230
9.4.4 Windows和Macintosh
編譯器230
9.4.5 頭文件的使用231
9.5 地址運算符:&233
9.6 改變調用函數中的變量235
9.7 指針簡介236
9.7.1 間接運算符:*237
9.7.2 指針聲明237
9.7.3 使用指針在函數間通信238
9.8 關鍵概念241
9.9 總結242
9.10 復習題242
9.11 編程練習243
**0章 數組和指針244
10.1 數組244
10.1.1 初始化244
10.1.2 指定初始化項目(C99)248
10.1.3 為數組賦值249
10.1.4 數組邊界249
10.1.5 指定數組大小250
10.2 多維數組251
10.2.1 初始化二維數組253
10.2.2 *多維數的數組254
10.3 指針和數組254
10.4 函數、數組和指針256
10.4.1 使用指針參數258
10.4.2 評論:指針和數組260
10.5 指針操作260
10.6 保護數組內容263
10.6.1 對形式參量使用const264
10.6.2 有關const的其他內容265
10.7 指針和多維數組267
10.7.1 指嚮多維數組的指針268
10.7.2 指針兼容性269
10.7.3 函數和多維數組270
10.8 變長數組(VLA)273
10.9 復閤文字276
10.10 關鍵概念278
10.11 總結278
10.12 復習題279
10.13 編程練習281
**1章 字符串和字符串函數282
11.1 字符串錶示和字符串I/O282
11.1.1 在程序中定義字符串283
11.1.2 指針和字符串288
11.2 字符串輸入289
11.2.1 創建存儲空間289
11.2.2 gets()函數289
11.2.3 fgets()函數291
11.2.4 scanf()函數292
11.3 字符串輸齣293
11.3.1 puts()函數293
11.3.2 fputs()函數294
11.3.3 printf()函數294
11.4 自定義字符串輸入/輸齣函數295
11.5 字符串函數297
11.5.1 strlen()函數297
11.5.2 strcat()函數298
11.5.3 strncat()函數299
11.5.4 strcmp()函數299
11.5.5 strncmp()變種303
11.5.6 strcpy()和strncpy()
函數303
11.5.7 sprintf()函數307
11.5.8 其他字符串函數307
11.6 字符串例子:字符串排序309
11.6.1 排序指針而不是字符串310
11.6.2 選擇排序算法310
11.7 ctype.h字符函數和字符串311
11.8 命令行參數312
11.8.1 集成環境下的命令行參數314
11.8.2 Macintosh的命令行參數314
11.9 把字符串轉換為數字314
11.10 關鍵概念316
11.11 總結316
11.12 復習題317
11.13 編程練習319
**2章 存儲類、鏈接和內存管理321
12.1 存儲類321
12.1.1 作用域321
12.1.2 鏈接323
12.1.3 存儲時期323
12.1.4 自動變量324
12.1.5 寄存器變量326
12.1.6 具有代碼塊作用域的靜態
變量327
12.1.7 具有外部鏈接的靜態變量328
12.1.8 具有內部鏈接的靜態變量331
12.1.9 多文件332
12.2 存儲類說明符332
12.3 存儲類和函數334
12.4 隨機數函數和靜態變量335
12.5 擲骰子337
12.6 分配內存:malloc()和free()340
12.6.1 free()的重要性343
12.6.2 函數calloc()343
12.6.3 動態內存分配與變長數組344
12.6.4 存儲類與動態內存分配344
12.7 ANSI C的類型限定詞345
12.7.1 類型限定詞const345
12.7.2 類型限定詞volatile347
12.7.3 類型限定詞restrict347
12.7.4 舊關鍵字的新位置348
12.8 關鍵概念348
12.9 總結349
12.10 復習題350
12.11 編程練習351
**3章 文件輸入/輸齣354
13.1 和文件進行通信354
13.1.1 文件是什麼354
13.1.2 文本視圖和二進製視圖355
13.1.3 I/O級彆355
13.1.4 標準文件355
13.2 標準I/O356
13.2.1 檢查命令行參數357
13.2.2 fopen()函數357
13.2.3 getc()函數和putc()
函數358
13.2.4 文件結尾358
13.2.5 fclose()函數359
13.2.6 標準文件指針359
13.3 一個簡單的文件壓縮程序360
13.4 文件I/O:fprintf ( )、fscanf ( )、
fgets ( )和fputs ( )函數361
13.4.1 fprintf()和fscanf()函數361
13.4.2 fgets()和fputs()函數362
13.4.3 注釋:gets()函數和fgets()
函數364
13.5 隨機存取:fseek()和ftell()
函數364
13.5.1 fseek()和ftell()
如何工作365
13.5.2 二進製模式和文本模式366
13.5.3 可移植性366
13.5.4 fgetpos()和fsetpos()
函數367
13.6 標準I/O內幕367
13.7 其他標準I/O函數368
13.7.1 int ungetc(int c,FILE * fp)
函數368
13.7.2 int fflush()函數368
13.7.3 int setvbuf()函數368
13.7.4 二進製I/O:fread()和
fwrite()函數369
13.7.5 size_t fwrite()函數369
13.7.6 size_t fread()函數370
13.7.7 int feof(FILE * fp)和int ferror
(FILE * fp)函數370
13.7.8 一個fread()和fwrite()
的例子370
13.7.9 使用二進製I/O進行隨機
存取372
13.8 關鍵概念374
13.9 總結374
13.10 復習題375
13.11 編程練習376
**4章 結構和其他數據形式378
14.1 示例問題:創建圖書目錄378
14.2 建立結構聲明379
14.3 定義結構變量380
14.3.1 初始化結構381
14.3.2 訪問結構成員381
14.3.3 結構的指定初始化項目382
14.4 結構數組382
14.4.1 聲明結構數組384
14.4.2 標識結構數組的成員384
14.4.3 程序討論385
14.5 嵌套結構385
14.6 指嚮結構的指針387
14.6.1 聲明和初始化結構指針388
14.6.2 使用指針訪問成員388
14.7 嚮函數傳遞結構信息389
14.7.1 傳遞結構成員389
14.7.2 使用結構地址390
14.7.3 把結構作為參數傳遞391
14.7.4 其他結構特性391
14.7.5 結構,還是指嚮結構的指針394
14.7.6 在結構中使用字符數組
還是字符指針395
14.7.7 結構、指針和malloc()395
14.7.8 復閤文字和結構(C99)397
14.7.9 伸縮型數組成員(C99)398
14.7.10 使用結構數組的函數400
14.8 把結構內容保存到文件中401
14.8.1 一個結構保存的實例402
14.8.2 程序要點404
14.9 結構:下一步是什麼405
14.10 聯閤簡介405
14.11 枚舉類型407
14.11.1 enum常量408
14.11.2 默認值408
14.11.3 指定值408
14.11.4 enum用法408
14.11.5 共享的名字空間410
14.12 typedef簡介410
14.13 奇特的聲明412
14.14 函數和指針413
14.15 關鍵概念418
14.16 總結418
14.17 復習題419
14.18 編程練習421
**5章 位操作423
15.1 二進製數、位和字節423
15.1.1 二進製整數424
15.1.2 有符號整數424
15.1.3 二進製浮點數424
15.2 其他基數425
15.2.1 八進製425
15.2.2 十六進製425
15.3 C的位運算符426
15.3.1 位邏輯運算符426
15.3.2 用法:掩碼428
15.3.3 用法:打開位428
15.3.4 用法:關閉位428
15.3.5 用法:轉置位429
15.3.6 用法:查看一位的值429
15.3.7 移位運算符429
15.3.8 編程實例430
15.3.9 另一個實例432
15.4 位字段434
15.4.1 位字段實例435
15.4.2 位字段和位運算符437
15.5 關鍵概念443
15.6 總結443
15.7 復習題443
15.8 編程練習444
**6章 C預處理器和C庫446
16.1 翻譯程序的**步446
16.2 明顯常量:#define447
16.2.1 語言符號449
16.2.2 重定義常量450
16.3 在#define中使用參數450
16.3.1 利用宏參數創建字符串:
#運算符452
16.3.2 預處理器的粘閤劑:
##運算符453
16.3.3 可變宏:...和
_ _VA_ARGS_ _454
16.4 宏,還是函數455
16.5 文件包含:#include455
16.5.1 頭文件:一個實例456
16.5.2 使用頭文件458
16.6 其他指令459
16.6.1 #undef指令459
16.6.2 已定義:C預處理器的觀點459
16.6.3 條件編譯459
在整個閱讀過程中,我最深刻的體會就是這本書的“負責任”。它不像一些快餐式的技術教程,隻是告訴你“怎麼做”,而是會告訴你“為什麼這麼做”,並且還會警示你“這樣做可能會有什麼後果”。比如,在講解指針時,它會反復強調野指針、內存泄漏等問題的危害,並給齣避免這些問題的建議。這種嚴謹的態度,讓我一開始就養成瞭良好的編程習慣。我不再隻是為瞭實現功能而盲目地編寫代碼,而是會更注重代碼的健壯性和可維護性。這本書就像一位經驗豐富的老程序員,它不僅傳授你知識,更重要的是教會你如何成為一名閤格的程序員。那些看似枯燥的警告和注意事項,在經曆瞭實際項目開發後,我纔真正體會到其價值。
評分這本書的封麵設計給我留下瞭深刻的印象,那種沉穩的藍色搭配經典的字體,一下子就勾起瞭我對編程初心的迴憶。我記得當初第一次翻開它的時候,是被它厚重的分量所吸引,感覺裏麵蘊藏著無窮的知識寶庫。書頁泛黃的紙張散發著淡淡的墨香,似乎在訴說著它陪伴瞭多少個夜晚,解答瞭多少個迷茫的瞬間。每一次觸碰到封麵,都能感受到一種厚實而可靠的質感,仿佛它不僅僅是一本書,更是一位經驗豐富的老師,隨時準備著引領我探索 C 語言的深邃世界。這種觸感和視覺上的衝擊,是如今許多輕薄的書籍難以給予的。它不像某些網紅書籍那樣追求錶麵的華麗,而是專注於內容的深度和結構的嚴謹,這種沉甸甸的感覺,恰恰是對其內容價值的一種無聲肯定。我常常把它放在書架最顯眼的位置,每次看到它,都會想起自己學習 C 語言的點點滴滴,那些曾經的挑戰,那些攻剋的喜悅,仿佛都凝聚在它的厚實之中。
評分這本書給我的另一大感受是它的“包容性”。它不像某些技術書籍那樣,隻側重於某個特定領域的深入講解,而是試圖為初學者提供一個相對全麵的 C 語言知識體係。從最基礎的“Hello, World!”開始,到內存管理、數據結構等稍微進階的內容,都進行瞭相對詳盡的介紹。我喜歡它在講解每一個概念時,都會給齣不同角度的解釋,或者提供多種實現方式的對比,讓我能夠從不同的視角去理解同一個問題。這極大地拓寬瞭我的視野,也讓我意識到 C 語言的強大和靈活。很多時候,我會在閱讀過程中遇到一些之前完全沒有想到的用法,或者一些在其他地方沒有見過的技巧。這種“意外的驚喜”不斷激勵著我繼續深入閱讀,探索 C 語言更多的可能性。
評分這本書的排版風格,可以說是一種“樸實無華”的極緻。我見過太多為瞭吸引眼球而把代碼塊搞得五顔六色,或者用大號字體、粗體字強調所謂“重點”的書籍。但 C Primer Plus(中文版)並沒有這樣做,它堅持瞭那種傳統的、以文字和代碼為主的排版。初看之下,可能會覺得有些單調,但正是這種簡潔,反而讓我更能專注於內容本身。沒有乾擾,沒有雜念,所有的注意力都集中在如何理解 C 語言的語法和概念。每一章的邏輯銜接都非常順暢,從基礎的變量、運算符,到復雜的指針、文件操作,層層遞進,環環相扣。我尤其喜歡它在講解新概念時,會迴顧之前學過的知識點,形成一種知識的閉環。這種設計,對於我這樣容易遺忘的讀者來說,簡直是福音。它不會讓你覺得自己學到的知識是孤立的,而是能看到它們之間的內在聯係。
評分當我第一次接觸這本書時,它給我的第一感覺就是“硬核”。沒有花哨的插圖,沒有故弄玄虛的術語,隻有紮實的代碼示例和清晰的理論闡述。那種直擊本質的講解方式,讓我這個初學者一開始有些吃不消,但隨著閱讀的深入,我逐漸體會到瞭它的好處。它迫使我去思考,去動手實踐,去理解每一個字,每一行代碼背後的邏輯。書中的練習題更是我學習路上的“攔路虎”和“墊腳石”,它們難度適中,又能有效地檢驗我是否真正掌握瞭前麵的知識點。有時候一道題卡住我一兩天,但一旦解決瞭,那種成就感是無與倫比的。這本書就像一個嚴格的教練,它不會給你喘息的機會,隻會把你推嚮更強的方嚮。我記得其中一個關於指針的章節,我反復看瞭好幾遍,畫瞭無數張圖,纔勉強理解瞭其中一些概念。這種“痛苦”的學習過程,反倒讓我對 C 語言的理解更加深刻,也為我後續學習其他更高級的語言打下瞭堅實的基礎。
評分比較經典的C語言入門書籍
評分東西很好值得購買不錯
評分是正版書,就是快遞有點慢
評分挺不錯的,就是快遞慢瞭一點
評分不錯,速度很快,質量挺好
評分這本書是經典,又是學長推薦的,好那是必然的
評分挺實惠的,蠻好
評分是正品的.第一次在非京東自營的店買東西.很滿意.發貨很快.僅比自營慢一天.:-)
評分很實用的一本書 值得推薦
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有