[問題] C語言列舉、指標、標準問題 (x6)
這陣子接了小家教,講義從頭到尾自己編,編的過程有些概念其實不是很確定,
依慣性作法,家教結束後把問題擠在一起一次提出,
請各位版友不吝指教。
------
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
推
09/16 23:14, , 1F
09/16 23:14, 1F
推
09/16 23:18, , 2F
09/16 23:18, 2F
→
09/16 23:19, , 3F
09/16 23:19, 3F
→
09/16 23:29, , 4F
09/16 23:29, 4F
→
09/17 04:47, , 5F
09/17 04:47, 5F
→
09/17 09:35, , 6F
09/17 09:35, 6F
→
09/17 09:35, , 7F
09/17 09:35, 7F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 4 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章