國嵌答疑 3

2021-06-17 01:08:52 字數 1780 閱讀 5467

(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 國嵌全部必修實驗手冊 第三十四部分...