看板 C_and_CPP 關於我們 聯絡資訊
這陣子接了小家教,講義從頭到尾自己編,編的過程有些概念其實不是很確定, 依慣性作法,家教結束後把問題擠在一起一次提出, 請各位版友不吝指教。 ------ 1. 列舉(enum)之變數能否以常數設初始值? enum E1{x, y, z}; enum E1 var = 0; 我翻以前的書是寫不行,但手邊 compiler 是都可以過。 另外想請教 C++ 下面這兩個 enum 是不是合法的 (它在 C 是不合法的) enum E1{x,y,z}; enum E2{a,b,x}; 關鍵在於 x 被兩個 enum 當作列舉元,C 沒有 :: 概念,但 C++ 有, 不知上面這段是否合法? 2. 針對 C string library 而言,諸如 strchr, strstr, strtok... etc, 標準裡是否已有明確規定,函式必須對輸入引數為 NULL 時做處理避免發生錯誤? 3. bsearch 為 stdlib 之二分搜尋法,但二分搜尋法會隨著問題不同導致寫法不同, 請教若鍵值存在時, C Stdlib library 裡之 bsearch 是否有保證找到的會是第一個 key-value? 4. NULL 本身做「取址」會怎樣? 這是在寫指標範例時,為了清楚表達寫下的 code , 但細思,若有一個步驟為對 NULL 做取址,是否合法? int *Ptr = NULL; printf(" Ptr = %08x\n", Ptr); printf("&Ptr = %08x\n", &Ptr); printf("*Ptr = %08x\n", *Ptr); 這點不知道在標準裡面有沒有明文規定?還是讓 compiler 自己搞? 5. 有沒有 float32 / float64 之資料型態? C99 後多了 stdint.h ,裡面有 uint32_t 等資料型態, 針對浮點數,是否只能以 typedef 方式去做而已? typedef 的話我想不透有沒有辦法轉交由 macro 判定, 不知有沒有人有經驗? 6. 一律以動態配置方式建立實體資料 這個有點像是資料結構的問題了。假定為 array。 若是有含「交換」動作的 sort algorithm , 若資料內容是一份屬性不少的 struct , 在做 swap 時會花不少時間。 假設欲建立起 struct Data array[N], 個人比較推用下面這種方式 < 只是示意而已,malloc 部份會做優化 > // 先建立 N 個指標 struct Data** Array = \ (struct Data**)malloc(sizeof(struct Data*) * N ); // 每個指標再用 malloc 做實體配置 for(i=0; i<N; ++i) { Arr[i] = (struct Data*)malloc(sizeof(struct Data)); // Read Data } 好處是到時候要交換時只要對指標做交換,不用對整份 struct 做交換。 壞處當然也不少,像是會平白無故多了 pointer 佔空間、coding 複雜不易維護。 針對這種設計模式,我想問的是,在做「尋訪」時,會由於是 pointer to pointer 所以讀寫時間會比一般的直接寫入還慢嗎? 直覺是會,在此做確認。 ( 我是覺得這種差異上的成本應該是比不上 swap 的成本來得高 ) ------ 問題有點多,煩請不吝賜教,小弟感激不盡 !! -- 「自從我學了 C# , 人都變聰明 , 考試都考一百分」 「自從我學了 VB , 皮膚都變好 , 人也變漂亮了 」 「自從我學了 Java , 明顯變壯 , 個子也變高了 」 「自從我學了 C++ , 內分泌失調 , 頭都禿了... 」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.161
stupid0319:NULL = -1 09/16 23:14
dirkc:針對問題2,應該是沒有,標準定義了功能面,至於實做版本有沒有 09/16 23:18
dirkc:也很難說,剛剛網路上查了一個實作版本就沒有檢查 09/16 23:19
EdisonX:謝謝 d 大的回答 :) @s~ 大 : NULL=-1 指的是?小弟不解. 09/16 23:29
BombCat:我以為NULL是為0的巨集常數耶,定義在stddef.h 09/17 04:47
BlazarArc:1. enum 在c++我記得沒有scope? 會重複 literal 09/17 09:35
BlazarArc:所以c++11才有enum class 09/17 09:35