c 中的一些常見技巧

2021-08-31 11:56:26 字數 1714 閱讀 7151

1、整形陣列賦初值

c/c++不支援陣列整體賦值,可以在宣告陣列時整體初始化。無論陣列有多大,全部初始化為0的操作很簡單,如int a[3000]=;就可以將a的3000個元素全部置0;若要賦其他值,例如全部賦值為7,寫成int a[3000]=;則不行,這只給a[0]賦值為7,其餘的都是0

2、memset函式(將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ascii值, 塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作, 其返回值為指向s的指標)

使用:#include

char b[5];

memset(b,'a',5);

第乙個引數為初始化的字元陣列,第二個為初始化的值,第三個為字元陣列的大小(因為字元佔乙個位元組,所以預設為字元陣列的大小)

如果給整形賦初值為1,則不對

3、時間複雜度

我現在給定乙個時間t,給定乙個n

for(int i=0;i則其時間複雜度為o(tn)而不是o(n^2)

4、題目比較簡單,主要有乙個坑要注意,由於給定的n,m最大可以是1000,如果直接在main函式中開1000*1000的陣列程式會崩潰,所以要把這個陣列設定成全域性變數

5、堆和棧(棧有作業系統限制,空間較小)

文章**armfly開發板v4軟體開發手冊,分享學習~

乙個由c/c++編譯的程式占用的記憶體分為以下幾個部分

(1)棧區(stack)— 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。

(2)堆區(heap)— 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能由os**。

(3)全域性區(靜態區)(static)—,全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數

和靜態變數在一塊區域, 未初始化的全域性變數、未初始化的靜態變數在相鄰的另一塊區域。

(4)文字常量區— 常量字串就是放在這裡的。

(5)程式**區— 存放函式體的二進位制**。

堆疊(stack)是記憶體中的乙個連續的塊。乙個叫堆疊指標的暫存器(sp)指向堆疊的棧頂。堆疊的底

部是乙個固定位址。堆疊有乙個特點就是,後進先出。也就是說,後放入的資料第乙個取出。

堆(heap)是向高位址擴充套件的資料結構,是不連續的記憶體區域。這是由於系統是用鍊錶來儲存的空閒

記憶體位址的,自然是不連續的,而鍊錶的遍歷方向是由低位址向高位址。

 在高階語言中,程式函式呼叫、函式中定義的變數都用到棧(stack)。

 用malloc, calloc, realloc等函式分配得到變空間是在堆(heap)上。

 在所有函式體外定義的是全域性量。

 加了static修飾符後不管放在在**都屬於靜態變數,存放在全域性區(靜態區)

 在所有函式體外定義的static變數表示在該檔案中有效,不能extern到別的檔案用。

 在函式體內定義的static表示只在該函式體內有效。

 函式中的"armfly"這樣的字串存放在常量區。

舉個具體的例子加深大家的理解。

int a = 0; //全域性初始化區, 可以被其他c檔案 extern 引用

satatic int ss = 0; //靜態變數,只允許在本檔案使用

char *p1; //全域性未初始化區

void main(void)

C 一些技巧

一如果函式對傳入的指標引數進行修改,一定要把引數設定為指標的指標或者指標的引用 delete the first occurrence of the node which value equals item in a single linked list void delete node head,...

Vue開發中的一些常見套路和技巧

屬性排放 export default created 資料獲取 beforemount 資料獲取 data 響應式資料 computed 計算屬性集合 methods 方法集合 銷毀頁面不要的資源 管理請求載入狀態 async beforemount catch error finally pro...

Pycharm中的一些技巧

作為乙個工具控,不來總結點pycharm的使用技巧怎麼行呢?1 遠端 編輯 除錯 這類使用情景就是,比如遠端機器是執行centos系統的伺服器,本地主機是安裝了pycharm的os x。要在本地寫 遠端機器上執行除錯。首先,新建乙個專案 目前還是乙個空專案 配置遠端python直譯器。並且設定ssh...