Time of Update: 2018-12-04
面試題總結 - C 語言 - 指標 1. 嵌入式系統經常具有要求程式員去訪問某特定的記憶體位置的特點。 在某工程中,要求設定一據對地址為0x67a9的整形變數的值為0xaa66,編譯器是一個純粹的ANSI編譯器寫帶碼去完成這一任務。注釋: 這一問題測試你是否知道為了訪問一個絕對位址,把一個整形數強制轉換(ypecast) 為一個指標是合法的,answer: int* ptr;ptr = (int*) 0x67a9;*ptr = 0xaa66;一個較晦澀的方法是:*(int* const) (
Time of Update: 2018-12-04
本文轉載於:http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html函數指標是指向函數的指標變數,即本質是一個指標變數。 int (*f) (int x); /* 聲明一個函數指標 */ f=func; /* 將func函數的首地址賦給指標f
Time of Update: 2018-12-04
1. 嵌入式系統總是要使用者對變數或寄存器進行位**作。給定一個整型變數a,寫兩段代**,第一個設定a的bit 3,第二個清除a 的bit3。在以上兩個**作中,要保持其它位不變。對這個問題有三種基本的反應 1). 不知道如何下手。該被面者從沒做過任何嵌入式系統的工作。 2). 用bit fields。Bit
Time of Update: 2018-12-04
指標是一個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的一個地址。 要搞清一個指標需要搞清指標的四方面的內容:指標的類型,指標所指向的 類型,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。讓我們分別說明。 先聲明幾個指標放著做例子: 例一: (1)int*ptr; (2)char*ptr; (3)int**ptr; (4)int(*ptr)[3]; (5)int*(*ptr)[4]; 指標的類型
Time of Update: 2018-12-04
1.用變數a給出下面的定義a) an integerint a;b) a pointer to an integerint *a; c) a pointer to a pointer to an integerint **a;d) an array of 10 integersint a[10];e) an array of 10 pointers to integersint* a[10]; f) a pointer to an array of 10 integersint (*a)[10]
Time of Update: 2018-12-04
之前寫過一個二叉尋找樹,其中最麻煩的是刪除元素的方法,一共分了8種情況,主要是要區分是否是根節點和非根節點,寫的太煩了,詳細請參見:http://blog.csdn.net/todd911/article/details/8471566今天要來簡化一下這個方法,之前我還寫過一篇《簡潔的單項鏈表插入操作》,利用雙指標,簡化了根節點和非根節點的區別,詳細請參見:http://blog.csdn.net/todd911/article/details/8941593,其實在二叉尋找樹中也可以使用這種方
Time of Update: 2018-12-04
alloca()函數用來在棧中分配size個位元組的記憶體空間,因此函數返回時會自動釋放掉空間。alloca函數定義及庫標頭檔如下:/* Allocate a block that will be freed when the calling function exits. */extern void *alloca (size_t __size)
Time of Update: 2018-12-04
本文轉載於:http://hi.baidu.com/bali_bao/item/f90a4f76121b113a6dc37c4bprintf()用法詳解 一、printf()函數是式樣化輸出函數, 一般用於向準則輸出裝置按規定式樣輸出訊息。正在編寫步驟時經常會用到此函數。printf()函數的挪用式樣為: printf("<式樣化字串>",<參量表>); 其中式樣化字串包括兩部分內容: 一部分是正常字元,
Time of Update: 2018-12-04
單項鏈表插入操作,我想應該是最基礎不過的東西,今天要介紹的是比較簡潔的版本。需求:插入一個node到鏈表的正確位置,當前鏈表中節點的value已經按照由小到大進行排列。傳統的插入操作:int insertNode(Node** rootp,int new_value){Node *current;Node *previous;Node *new;current = *rootp;previous = NULL;while(current != NULL &&
Time of Update: 2018-12-04
宏#line改變_LINE_與_FILE_的內容,它們是在編譯器中預先定義的標識符。 基本形式如下: # line number [ "filename"] 其中的數字為任何正整數,可選的檔案名稱為任意有效檔案標識符。行號為來源程式中當前行號,檔案名稱為源檔案的名字。宏#line主要用於調試及其它特殊應用。#include <stdio.h>int main(void){ printf("%s %d\n",__FILE__,__LINE__);
Time of Update: 2018-12-04
1.1. Getting Started1.1. 入門 This manual is written with the assumption that you are at least somewhat familiar with the C programming language and basic programming concepts. Specifically, familiarity with ISO standard C (see ISO C), rather than
Time of Update: 2018-12-04
#include <stdio.h>#include <malloc.h>int main(void){ int *p; int *a; a = (int*)malloc(sizeof*p); *a=1; printf("%d\n",*a); free(a); return 0;}上面這段代碼,編譯運行都沒有任何問題。a =
Time of Update: 2018-12-04
將數組放到結構體中,直接使用“=”就能將數組中的值全部拷貝到其他相同類型的數組中。#include <stdio.h>struct array_tag{ int a[10];};int main(void){ struct array_tag m = {{1,2,3,4,5,6,7,8,9,0}}; int i; for(i=0;i<10;i++){ printf("%d ",m.a[i]);
Time of Update: 2018-12-04
方法一:#include <stdio.h>#define PRINT(FORMAT,VALUE) \ printf("the value is "FORMAT"\n",VALUE);int main(void){ int x = 6; PRINT("%d",x+2); return 0;}運行結果:the value is 8方法二:#include <stdio.h>#define
Time of Update: 2018-12-04
這是由我“無中生有”引起的問題,記錄下來或許對大家有協助。 我們的一個測試程式是用C#寫的,它會讀取一個設定檔,設定檔裡包含串口的設定或者網路IP/連接埠的設定。 我有一次淡疼的把這個程式改為了“Windows 2000相容模式”,在後來的使用中便發現這個程式無法正確解析設定檔。 具體原因已經超出我的能力範圍。我想和XP相容模式下對於程式運行環境的差異有關。 在native的XP下,程式有足夠的許可權訪問或申請它需要的資源;而Windows 2000相容模式下,作業系統為程式的運行“
Time of Update: 2018-12-04
今天本來是周六,薄荷老大昨晚說來加一下班,正好可以來做這裡靜靜的看會書。昨晚去了書店買了3本書。一本C的 一本C++的一本EJB的。為了學好C++,我還是老實的從C開始學起來了。王猛大哥說每天最少看500行代碼,然後被類庫,測試我。感謝他們。上午看了一會書,學到了一些以前在JAVA中沒有特別去注意的東西,這些都是基礎的東西。先說一下學到的吧: 1:int 一般來說是長度為16位,也就是2個位元組,short int 也一般為16個位元組,long
Time of Update: 2018-12-04
今天為了徹底搞定一個關於c中數組初始化和聲明不同情況下,比如只聲明一個數組char str[20];那麼這str裡面是什麼內容呢?我用vc6++,debug下看到都是-56餓asc碼,後來請教了一個華為的大牛,他說 按照理論來說裡面的內容都是有可能的,這和叫做“髒記憶體”或者叫做“野數組”。好了第一個問題搞懂了。 第二個問題
Time of Update: 2018-12-04
昨晚睡前看書的時候看到C語言裡面對變數的定義很有意思,比如auto static register extern這些關鍵字。 最感興趣的莫過於那個局部的static定義的變數。 根據書中描述局部static的變數 等價於 全域的非靜態變數。一般我們知道全域的變數在函數結束後再次調用的時候就會改變的,但是局部的靜態變數 總覺得這樣來很BT。經過驗證的確是這樣的效果。 看代碼:先來個局部的靜態變數 #include <stdio.h>int main(){int
Time of Update: 2018-12-04
1:類似junit的斷言,只是在assert中的斷言,如果不滿足的話就程式退出。比如#include <assert.h>int main(void){ assert(6 < 5); system("pause"); return 0;}在執行到assert(6 < 5);的時候因為不滿足斷言,於是程式退出。如果不想讓assert(6 < 5)起作用,就在最上面添加宏定義#define NDEBUG要添加在#include
Time of Update: 2018-12-04
數組賦值我總結一下吧也就三種,那char的來舉例: 定義的時候直接賦值.1:char a[20] = "Hello World!"; 2: char a[20]; strcpy(a, "Hello World!"); 3:char a[20] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!'}; 常見錯誤賦值方式: 1:char a[20]; a = "Hello