Time of Update: 2018-12-04
用c語言模仿c++封裝.typedef struct test{ int info; char *pbuff; int (*getinfo)(struct test *pthis); //在c++裡面每一個成員函數都會有一個this指標,只不過對程式員是透明的,在c語言的結構體裡沒有這個this指標,所以,我們做自己做一個this; void (*inittest)(struct test *pthis); //相當於建構函式
Time of Update: 2018-12-04
轉自:http://blog.csdn.net/linweig/article/details/5060143C語言測試是招聘嵌入式系統程式員過程中必須而且有效方法。這些年,我既參加也組織了許多這種測試,在這過程中我意識到這些測試能為帶面試者和被面試者提供許多有用資訊.此外,撇開面試的壓力不談,這種測試也是相當有趣的。 從被面試者的角度來講,你能瞭解許多關於出題者或監考者的情況。這個測試只是出題者為顯示其對ANSI標準細節的知識而不是技術技巧而設計嗎?這個愚蠢的
Time of Update: 2018-12-04
template <class DataType>struct Node{ DataType info; Node<DataType> *next;};template <class DataType>class LinkedList{public: LinkedList(); ~LinkedList(); LinkedList(const LinkedList<DataType>
Time of Update: 2018-12-04
c語言中交換變數的方法有很多:1.使用中間變數進行交換指標模式:swap( int* p1,int* p2 ){ int p; p = *p1; *p1 = *p2; *p2 = p;}引用變數模式:void swap(int &a,int &b){a+=b;b=a-b;a=a-b;}也可以直接定義成為宏:#define swap(a,b) a+=b;b=a-b;a=a-b2.利用異或,不使用中間變數指標模式:void swap(int *a, int *b){ *a =
Time of Update: 2018-12-04
十一.邏輯運算子流量分析 &&和||的短路規則:||從左向右計算,遇到為真的條件時停止計算,整個運算式為真;所有條件為假時,運算式才為假 &&從左向右計算,當遇到為假的條件時停止計算,整個運算式為假;所有條件為真時運算式才為真。 !運算子的結果只有0和1,只有作用0時才為1,作用不為零時結果是0. 三目運算子(a?
Time of Update: 2018-12-04
一.基礎資料型別 (Elementary Data Type):資料類型可以理解為固定記憶體大小的別名,是建立變數的模子。變數是一段實際連續儲存空間的別名,程式中通過變數來申請並命名儲存空間,通過變數的名字可以使用儲存空間。/*****************************************************************************************************************************************
Time of Update: 2018-12-04
十五.編譯過程 file.c,file.h經過前置處理器處理成為file.i,再經過編譯器(gcc)成為彙編file.s,再經過彙編器(as)成為file.o,最後通過連接器(linker)成為可執行檔。 前置處理器:1.處理所有的注釋,以空格代替 2.將所有的#define刪除,並展開所有定義的宏
Time of Update: 2018-12-04
六.struct和union 1.struct:空結構體所佔的空間與編譯器自己的規定有關。 結構體中最後一個元素可以是未定義大小的數組,由此產生柔性數組。 2.union:受系統大小端的影響。 union c{int i;char c;};union CC;CC.i=1;printf("%d\n",CC.c);大端會輸出0,小端輸出1;七.enum和typedef
Time of Update: 2018-12-04
二十一.指標基礎 指標本質:指標本質上也是一個變數,需要佔用一定的記憶體空間,指標用於儲存記憶體位址的值。 傳值調用與傳址調用:1.指標是變數,因此可以聲明指標參數 2.在一個函數體內部需要改變實參的值,則需要使用指標參數,傳址。 3.函數調用時,實參值將複製到形參
Time of Update: 2018-12-04
最早的C編譯器並不檢查下標,而最新的編譯器依然不對它進行檢查。這項任務之所以很困難,是因為下標引用可以作為任意的指標,而不僅僅是數組名。
Time of Update: 2018-12-04
所謂數組引用,即指向數組的引用;如 int a[10] ; int (&b)[10] = a ;如果寫成 int a[10] ; int* &b = a ;將會報錯: cannot convert from 'int [10]' to 'int
Time of Update: 2018-12-04
二十五.指標數組和數組指標 數群組類型:c語言中的數組有自己特定的類型 數群組類型由元素類型和數組大小共同決定,例如:int array[5]的類型是int [5],而不是int 定義數群組類型:通過typedef為數群組類型重新命名-------typedef type(name)[size]; 數群組類型:typedef
Time of Update: 2018-12-04
#include<iostream>using namespace std;template < class TYPE >class HisClass{ TYPE data;public: HisClass( TYPE a, TYPE b, TYPE c );TYPE getData() { return data; }};template < class TYPE >
Time of Update: 2018-12-04
二十九.動態記憶體分配 為什麼使用動態記憶體分配:c語言中的一切都是基於記憶體的,變數和數組都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期 間決定,如果需要一些額外的記憶體空間,就需要動態分配 malloc所分配的是一塊連續的記憶體,以位元組為單位,並且不帶任何的類型資訊;free用於將動態記憶體歸還系統
Time of Update: 2018-12-04
三十三.認清函數的真面目 聲明和定義:1.程式中的聲明可理解為預先告訴編譯器實體的存在,如:變數,函數等 2.程式中的定義明確指示編譯器實體的意義 函數參數:1.函數參數在本質上與局部變數相同,都是在棧上分配空間 2.函數參數的初始值是函數調用時的實參數int f(int i,int j){ printf("%
Time of Update: 2018-12-04
在linux編程中,有時候會用到批量處理檔案。比如寫一個上傳工具,使用者輸入檔案名稱,如果此時使用者使用的是匹配的檔案名稱,那麼程式應該做到根據匹配字串自動搜尋符合要求的檔案名稱的功能。linux有一個glob函數,可以做到這一點,該函數位於標頭檔glob.h中案例:#include <iostream>#include <string>#include <glob.h>using namespace std; void print_gl(glob_t
Time of Update: 2018-12-04
三十七.面試分析1.指標運算#include <stdio.h>void main(){ int TestArray[5][5] = { {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25}, {26,27,28,29,30},
Time of Update: 2018-12-04
#include <iostream>#include <string>#include <ostream>#include <fstream>using namespace std;bool xiangling(int *a,int n){for(int i=0;i<n-1;i++)if(a[i]==a[i+1]){return true;}return false;}void swap1(int *a,int *b){int temp=*
Time of Update: 2018-12-04
Apply function to rangeApplies function fn to each of the elements in the range [first,last).The behavior of this template function is equivalent to:123456789template<class InputIterator, class Function> Function for_each(InputIterator first,
Time of Update: 2018-12-04
類中的靜態成員真是個讓人愛恨交加的特性。我決定好好總結一下靜態類成員的知識點,以便自己在以後面試中,在此類問題上不在被動。 靜態類成員包括待用資料成員和靜態函數成員兩部分。 一