(a〈b?a:b)=3 語法錯誤!c編譯器會報錯 條件運算不能作為左值
main()
#if ac_sync
printf("===\n");
#endif}
結果是會列印== (#define在預處理時定義,而if(0)在執行時才確定)
#if
#endif 配對, 例:#if a == 3 正確則執行後面的
struct testc
;struct testd;
2結構體大小分別為7、8 (陣列不作為整體看待,陣列為連續空間)
下面函式有什麼本質區別?你會選擇哪種?為什麼?
void fun1(int a, int x, int b, int y, int n)
{int i = 0;
for(i=0; i
陣列的賦值a[i * x] = b[i * y]; 乘法運算相比指標運算會更耗時間
但是 我們不要忽略可讀性,其實從c的角度第一種方法的可讀性高
但是他們的差距卻是巨大的 ,這個需要從cpu的cache來說了, cpu每次訪問記憶體的時候都會先從記憶體將資料讀入cache 然後以後都從cache取資料。但是cache的大小是有限的 因此只會有部分進入cache。我們來看這個程式 c[i][j] = a[i][k] * b[k][j];
我們都知道c中二維陣列是在記憶體中一維排列的 如果 我們把k迴圈放在第三層 那麼cache基本沒有用了 , 每次都需要重新到內訪問資料。交換後 每次取到cache的資料都可以復用多次 ,所以說第二種寫法效率高。
必須先滿足第三層迴圈在記憶體的命中率,其次第二層,再外層
函式strcmp用於判斷字串是否相等,同樣的memcpy也能用於字串的相等判斷,兩者有什麼不同?為什麼?
strcmp 只比較字串 以'\0'為結尾, memcpy 比較記憶體單元 需要制定比較長度
第一 strcmp的比較也結束符'\0'密切相關 也就是說它不夠安全 因為memcmp在比較的時候需要提供長度的 相對來說安全多了 這個是從c安全程式設計的角度來分析
第二 效率
strcmp就是乙個字元乙個字元的比較, 也就是說cpu要「想辦法」只比較乙個位元組 而memcmp是根據硬體平台的特性 每次比較4個位元組或者8個位元組
那麼我們從cache來看 strcmp每次將一塊資料讀入cache後只取乙個位元組進行比較 而memcmp每次都一塊記憶體進入cache並且 根據cpu「喜好」進行塊比較
結構體獲聯合體中由於有位元組對齊問題,而用於對齊的這部分記憶體中資料可能是隨機的,所以用strcmp可能會誤報,memcmp也不能比較
乙個整數陣列,實現乙個函式將陣列中的所有奇數調整到陣列前面,所有偶數調整到陣列後面。
前面找偶數,後面找奇數,然後交換,重複這個過程
int a;
int* p = &a;
void* pv = p;
printf("%d\n", *pv); //pv就是a的位址 //但是不能輸出整數,必須進行強制型別轉換
請問我的這個程式有問題嗎
那如果 我們不想知道讓 別人知道指標的具體指向的資料的型別 我們就可以用void* 指標來指向具體的位址
在我的資料結構課程中用的就是這個技巧 因為我不想使用我建立的資料結構的人 知道我具體如何表示資料結構的 如 鍊錶的頭 等等 所以我用void* 指標來返回
(封裝性)
國嵌驅動專題一二
一 使用字元裝置驅動 1 編譯驅動 安裝 建立裝置檔案 訪問裝置 2 裝置描述結構cdev 結構定義 裝置號dev t 裝置操作集 3 驅動初始化 分配裝置描述結構 初始化裝置描述結構 註冊裝置描述結構 4 裝置號為unsigned int mkdev major minor 5 動態分配主裝置號 ...
Linux學習規劃 國嵌
學習步驟 linux系統管理,如一些基本指令的使用,shell程式設計。linux應用程式開發。處理器基礎,如arm體系結構與程式設計。linux核心開發基礎。嵌入式linux環境搭建。linux驅動開發。深入linux核心。涵蓋內容 linux定製安裝,命令詳解,samba等使用,shell程式設...
國嵌全部必修實驗手冊
國嵌全部必修實驗手冊 第二十六部分 共34部分 pdf 國嵌全部必修實驗手冊 第四部分 共34部分 pdf 國嵌全部必修實驗手冊 第三部分 共34部分 pdf 國嵌全部必修實驗手冊 第一部分 共34部分 pdf 國嵌全部必修實驗手冊 第十五部分 共34部分 pdf 國嵌全部必修實驗手冊 第三十四部分...