1. 程式人生 > >很酷的C語言技巧,特別是第2個

很酷的C語言技巧,特別是第2個

C語言常常讓人覺得它所能表達的東西非常有限。它不具有類似第一級函式和模式匹配這樣的高階功能。但是C非常簡單,並且仍然有一些非常有用的語法技巧和功能,只是沒有多少人知道罷了。

指定的初始化

很多人都知道像這樣來靜態地初始化陣列:

1 int fibs[] = {1, 1, 2, 3, 5};

C99標準實際上支援一種更為直觀簡單的方式來初始化各種不同的集合類資料(如:結構體,聯合體和陣列)。

陣列

我們可以指定陣列的元素來進行初始化。這非常有用,特別是當我們需要根據一組#define來保持某種對映關係的同步更新時。來看看一組錯誤碼的定義,如:

1 2 3 4 5 6 7 8 9 10 /* Entries may not correspond to actual numbers. Some entries omitted. */ #define EINVAL 1 #define ENOMEM 2 #define EFAULT 3 /* ... */ #define E2BIG  7 #define EBUSY  8 /* ... */ #define ECHILD 12
/* ... */

現在,假設我們想為每個錯誤碼提供一個錯誤描述的字串。為了確保陣列保持了最新的定義,無論標頭檔案做了任何修改或增補,我們都可以用這個陣列指定的語法。

1 2 3 4 5 6 7 8 9 10 11 12 char *err_strings[] = { [0] = "Success", [EINVAL] = "Invalid argument", [ENOMEM] = "Not enough memory"
, [EFAULT] = "Bad address", /* ... */ [E2BIG ] = "Argument list too long", [EBUSY ] = "Device or resource busy", /* ... */ [ECHILD] = "No child processes" /* ... */ };

這樣就可以靜態分配足夠的空間,且保證最大的索引是合法的,同時將特殊的索引初始化為指定的值,並將剩下的索引初始化為0。

Cool C Tricks
伯樂線上配圖)

結構體與聯合體

1

相關推薦

C語言技巧特別是2

C語言常常讓人覺得它所能表達的東西非常有限。它不具有類似第一級函式和模式匹配這樣的高階功能。但是C非常簡單,並且仍然有一些非常有用的語法技巧和功能,只是沒有多少人知道罷了。 指定的初始化 很多人都知道像這樣來靜態地初始化陣列: 1

C語言學習書籍推薦《C語言程式設計 現代方法(2版)》下載

下載地址:點我 C語言仍然是計算機領域的通用語言之一,但現在的C語言已經和當初的時候大不相同了。本書主要的一個目的就是通過一種“現代方法”來介紹C語言,書中強調標準C,強調軟體工程,不再強調“手工優化”。這一版中緊密結合了C99標準,並與C89標準進行對照,補充了C99中的**新特性。本書分為C語言的基

這裡是MYSQL操作的C語言程式碼我貼幾你們看吧

#include <stdio.h>#include <string.h> #include <windows.h>#include <mysql.h> int main(void ){  int id;  MYSQL mysq

C99中C語言技巧

C語言常常讓人覺得它所能表達的東西非常有限。它不具有類似第一級函式和模式匹配這樣的高階功能。但是C非常簡單,並且仍然有一些非常有用的語法技巧和功能,只是沒有多少人知道罷了。 指定的初始化 很多人都知道像這樣來靜態地初始化陣列: intfibs[] = {1, 1

C語言實現粒子運動效果最美C語言!最炫C語言

eight src tps space hit size fad mar font 效果 我有一個微信公眾號,經常會分享一些C語言/C++技術相關的幹貨;如果你喜歡我的分享,可以用微信搜索“C語言學習部落”關註歡迎大家加入千人交流答疑裙:627+012+464C語

1098: C語言程式設計教程(三版)課後習題10.5---有n人圍成一圈順序排號。從1個人開始報數(從1到3報數)凡報到3的人退出圈子問最後留下的是原來的幾號的那位。

題目描述 有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來的第幾號的那位。 輸入 初始人數n 輸出 最後一人的初始編號 樣例輸入 3 樣例輸出 2 提示 來源 思路點撥:定義一個數組,陣列下標表示人的編號,若數組裡面的

1079: C語言程式設計教程(三版)課後習題8.2---求方程 的根用三函式分別求當b^2-4ac大於0、等於0、和小於0時的根並輸出結果。從主函式輸入a、b、c的值。【兩種方法】

題目描述 求方程 的根,用三個函式分別求當b^2-4ac大於0、等於0、和小於0時的根,並輸出結果。從主函式輸入a、b、c的值。 輸入 a b c 輸出 x1=? x2=? 樣例輸入 4

通過編寫c語言程序運行時實現打印另一個程序的源代碼和行號

clas 行號 意義 spa clu 可執行 stdlib.h 讀取 進行 2017年6月1日程序編寫說明: 1.實現行號的打印,實現代碼的讀取和輸出,理解主函數中的參數含義。 2.對fgets函數理解不夠 3.對return(1); return 0的含義理解不夠 4.未

快速學習C語言途徑讓你少走彎路

串處理 毫無 深入 中國人 sql 以及 ubi 思維 思路   1.標準C語言能幹什麽?   坦白講,在今天軟件已經發展了半個多世紀,單純的C語言什麽都幹不了。標準C語言庫只提供了一些通用的邏輯運算方法以及字符串處理,當然字符串在C語言看來也是一種操作內存的方法,所以單純

Tinyhttpd - 超輕量型Http Server使用C語言開發全部代碼只有502行(包括註釋)附帶一個簡單的Client

net 事件驅動 免費 好評 lua ansi c tor 這一 通過 - 2. Tinyhttpd tinyhttpd是一個超輕量型Http Server,使用C語言開發,全部代碼只有502行(包括註釋),附帶一個簡單的Client,可以通過閱讀這段代碼理解一個 Htt

C語言每日一練——四題

圖片 數據文件 () inf fop dat文件 print 數組a open 一、題目要求 已知數據文件in.dat中有300個四位數,並調用readDat()函數把這些數存儲數組a中,編寫函數jsValue(),其功能是:求出所有這些四位數是素數的個數cnt,再把所有滿

C語言程序設計I—六周教學

想象 jpg 作業 image tps 嵌套 cfb 生活 第五周作業 第六周教學總結(8/10-14/10) 教學內容   第二章 用C語言編寫程序    2.4 輸出華氏-攝氏溫度轉換表 課前準備   在藍墨雲班課發布資源:   PTA:2018秋第六周作業 分享碼:8

1012 - C語言程式設計教程(三版)課後習題6.2

1012 - C語言程式設計教程(第三版)課後習題6.2 時間限制:1秒 記憶體限制:128兆 題目描述 輸入一行字元,分別統計出其中英文字母、空格、數字和其他字元的個數。 輸入 一行字元 輸出 統計值 樣例輸入 aklsjflj123 sadf918u324 asdf91u32oa

1011 - C語言程式設計教程(三版)課後習題6.1

1011 - C語言程式設計教程(第三版)課後習題6.1 時間限制:1秒 記憶體限制:128兆 題目描述 輸入兩個正整數m和n,求其最大公約數和最小公倍數。 輸入 兩個整數 輸出 最大公約數,最小公倍數 樣例輸入 5 7 樣例輸出 1 35 最大公約數求法我是用的是輾轉相除法進行

1010 - C語言程式設計教程(三版)課後習題5.8

1010 - C語言程式設計教程(第三版)課後習題5.8 時間限制:1秒 記憶體限制:128兆 題目描述 企業發放的獎金根據利潤提成。利潤低於或等於100000元的,獎金可提10%; 利潤高於100000元,低於200000元(100000<I≤200000)時,低於100000元的部

1047 - C語言程式設計教程(三版)課後習題10.5

1047 - C語言程式設計教程(第三版)課後習題10.5 時間限制:1秒 記憶體限制:128兆 題目描述 有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來的第幾號的那位。 輸入 初始人數n 輸出 最後一人的初始編號 樣例輸入

1022 - C語言程式設計教程(三版)課後習題7.1

1022 - C語言程式設計教程(第三版)課後習題7.1 時間限制:1秒 記憶體限制:128兆 題目描述 用篩法求之N內的素數。 輸入 N 輸出 0~N的素數 樣例輸入 100 樣例輸出 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

1008 - C語言程式設計教程(三版)課後習題5.6

1008 - C語言程式設計教程(第三版)課後習題5.6 時間限制:1秒 記憶體限制:128兆 題目描述 給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上為A 80-89分為B 70-79分為C 60-69分為D 60分以下為E 輸入 一個整數0

1007 - C語言程式設計教程(三版)課後習題5.5

007 - C語言程式設計教程(第三版)課後習題5.5 時間限制:1秒 記憶體限制:128兆 描述 有一個函式 y={ x x<1 | 2x-1 1<=x<10 \ 3x-11 x>=10 寫一段程式,輸入x,輸出y 輸入 一個數x 輸出 一個數y 樣例輸

1006 - C語言程式設計教程(三版)課後習題5.4

1006 - C語言程式設計教程(第三版)課後習題5.4 時間限制:1秒 記憶體限制:128兆 描述 有三個整數a b c,由鍵盤輸入,輸出其中的最大的數。 輸入 一行陣列,分別為a b c 輸出 a b c其中最大的數 樣例輸入 10 20 30 樣例輸出 30 提示 max ?