日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

谭浩强《c语言程序设计》第四版--重点难点总结

發(fā)布時間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谭浩强《c语言程序设计》第四版--重点难点总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、什么叫結(jié)構(gòu)化程序設(shè)計,主要內(nèi)容是什么?
* P33頁

2、while 和do–while的執(zhí)行方式和區(qū)別?P111
* do 在循環(huán)體之前執(zhí)行,這種循環(huán)體至少執(zhí)行一次。
* while:先判斷再執(zhí)行循環(huán)體;do–while 先執(zhí)行再判斷;
* 重點(diǎn):循環(huán)次數(shù)的準(zhǔn)確計算。
* 使用環(huán)境:當(dāng)循環(huán)體至少需要執(zhí)行一次時;
* while(6) 表達(dá)式為真? c語言規(guī)定:0為邏輯假;非零為邏輯真;所以表達(dá)式計算結(jié)果非零也是邏輯真;
* 語法格式:do{}while();
* while 語句可以使用break和continue語句。break終止循環(huán),continue終止本次循環(huán);

3、預(yù)處理指令?
* #define
* #define A ** 任何文本替換。
* #define A a\

b * 如果#define 的定義較長,采用\ 運(yùn)算符。除了最后一行,其他行加\。程序中的結(jié)構(gòu)體定義和初始化。 * 宏與函數(shù)的區(qū)別?宏常用于執(zhí)行簡單的計算。 * 原因:調(diào)用和從函數(shù)返回的代碼很可能比執(zhí)行這個小型代碼計算工作的代碼大,所以使用宏比使用函數(shù)再程序的規(guī)模和速度方面都更勝一籌。 * 函數(shù)的參數(shù)必須聲明為一種特定類型,函數(shù)只有在類型合適時使用。而宏可用于整形,浮點(diǎn)型等。宏與參數(shù)類型無關(guān)。 * 調(diào)用函數(shù)時求值一次并返回,表達(dá)式結(jié)果更容易預(yù)測,而宏的操作符優(yōu)先級需要又上下文決定; * 由于調(diào)用宏和調(diào)用函數(shù)的方式相同,因此常用大寫描述宏,用小寫描述函數(shù);如: MAX(a,b); max(a,b); * #undef * 用于移除一個宏定義; * #if * #elif * #else * endif * 條件編譯。可選擇性對某條語句進(jìn)行編譯或被忽略。可方便用于代碼調(diào)試階段,不建議應(yīng)用于產(chǎn)品版本。 * 可用于不同銷售版本,如同步機(jī)代碼和異步機(jī)代碼條件編譯; * 類似與代碼注釋屏蔽。 * 如: * #if DEBUG * statement; * #endif * #define DEBUG 1 * #ifdef * #endif * 表達(dá)是否定義問題; * #include * 表達(dá)文件包含,文件取代該指令。 * 注意:當(dāng)頭文件被包含時,位于頭文件內(nèi)的所有內(nèi)容都要被編譯; * 注意多重包含問題,頭文件往往與條件編譯配合使用; * 如果可能,應(yīng)避免多重包含,會拖慢編譯速度; * 不同集合的聲明分離到不同的頭文件以改善信息隱藏;

4、常變量和符號常量的區(qū)別?
* 常變量: const float pi=3.13159;
* 符號常量: #define PI 3.14159
* 常變量占據(jù)存儲空間;
* []用法區(qū)別?

5、什么是枚舉類型?有哪些應(yīng)用?
* enum
* 變量只有幾種可能的取值。
* http://c.biancheng.net/view/2034.html
* 可用于狀態(tài)機(jī)或多分支代碼的選擇執(zhí)行,比較直觀。
* 匯川M380代碼舉例:
* enum RUN_STATUS
* {
* RUN_STATUS_WAIT, // 等待啟動
* RUN_STATUS_ZERO, // 零頻運(yùn)行
* RUN_STATUS_START, // 啟動
* RUN_STATUS_NORMAL, // (正常)運(yùn)行
* RUN_STATUS_STOP, // 停機(jī)
* RUN_STATUS_JOG, // 點(diǎn)動運(yùn)行
* RUN_STATUS_POS_CTRL, // 位置控制
*
* RUN_STATUS_TUNE, // 調(diào)諧運(yùn)行
* RUN_STATUS_DI_BRAKE_DEC, // DI端子直流制動頻率減速
* RUN_STATUS_DI_BRAKE, // DI端子的直流制動(非啟動直流制動和停機(jī)直流制動)
* RUN_STATUS_LOSE_LOAD, // 掉載運(yùn)行
* RUN_STATUS_SHUT_DOWN // shut down, 關(guān)斷
* };
* extern enum RUN_STATUS runStatus;

6、共用體類型?
* 同一個內(nèi)存單元存儲不同的類型變量,變量覆蓋存儲。
* 方便內(nèi)存的不同訪問形式;
* M380代碼舉例:
* union RUN_FLAG
* {
* Uint16 all;
* struct RUN_FLAG_BITS bit;
* };
* extern union RUN_FLAG runFlag;

7、DSP2812的整形,長整型等字節(jié)數(shù)為多少?
* 32位CPU的含義:內(nèi)存編址位32位;即尋址位寬32位;
* C語言不確定不同數(shù)據(jù)類型的字節(jié)數(shù),提高了C語言的通用性,具體字節(jié)數(shù)由編譯器決定。
* 意義:確定數(shù)據(jù)范圍,防止數(shù)據(jù)截斷及溢出。
* 位寬:
* #ifndef DSP28_DATA_TYPES
* #define DSP28_DATA_TYPES
* typedef int int16;
* typedef long int32;
* typedef long long int64;
* typedef unsigned int Uint16;
* typedef unsigned long Uint32;
* typedef unsigned long long Uint64;
* typedef float float32;
* typedef long double float64;
* #endif
* 程序特別采用typedef對數(shù)據(jù)類型位數(shù)進(jìn)行解釋。

8、負(fù)數(shù)的二進(jìn)制描述?
* 補(bǔ)碼存放原則。 對應(yīng)的正數(shù)的二進(jìn)制 正數(shù)取反加一。
* -14~~~14(0000 1110)~11110001~11110010
*

9、除法運(yùn)算A/B,當(dāng)B為0時?10、數(shù)據(jù)類型的混合運(yùn)算?P54頁
* 如果運(yùn)算符兩側(cè)的數(shù)據(jù)類型不同,則先自動進(jìn)行類型轉(zhuǎn)換,使兩者成為同一種數(shù)據(jù)類型,然后進(jìn)行運(yùn)算。
* 強(qiáng)制類型轉(zhuǎn)換的括號問題。

11、強(qiáng)制類型轉(zhuǎn)換和自動類型轉(zhuǎn)換?
* (int)a,原始的a的類型未改變;
* 括號運(yùn)算符優(yōu)先級最高;
* 自動類型轉(zhuǎn)換是由低類型往高類型自動轉(zhuǎn)換;若要讓變量由高往低轉(zhuǎn)換,需要用強(qiáng)制類型轉(zhuǎn)換;
* 取余運(yùn)算%,需要強(qiáng)制類型轉(zhuǎn)換,否則不合法;實(shí)參和形參對應(yīng)必須采用強(qiáng)制類型轉(zhuǎn)換;

12,13、inti;i=3.68,i的值為多少?
* i為3.浮點(diǎn)數(shù)賦值給整形時,先對浮點(diǎn)數(shù)取整,再傳遞;
* 占字節(jié)多的整形變量賦值給字節(jié)少的整型時,只將低字節(jié)原封不動送到被賦值變量。“即會發(fā)生截斷問題”。
* 整型數(shù)據(jù)傳遞屬于按存儲形式直接傳送;實(shí)型與整型傳遞需要變換存儲形式;

14、int a,b,c=5;的賦值含義?
* a,b,c為整形變量,但只對c賦值;
* 需要對多個變量賦值的寫法:int a=5,b=5,c=5;

15、若a=4;b=5;求a&&b,a||b,a&b,a|b?
* 邏輯運(yùn)算符:&& || 結(jié)果為真或假。 a,b為非零數(shù),所以a&&b為1,a||b為1;
* 位運(yùn)算符。 & | ^ ~ a&b為:0100&0101 .
* 異或,相同為0,不同為1;
* 位運(yùn)算符的操作數(shù)要求為整型;

16、Max=(a>b)?a:b;
* 條件運(yùn)算符:
* 運(yùn)算符的優(yōu)先級很低,是c語言唯一的一個三目運(yùn)算符。
* 首先計算表達(dá)式1,若為真(非零)那么表達(dá)式的值為表達(dá)式2,表達(dá)式3不求值,否則為表達(dá)式3,此時表達(dá)式2不求值;

17、switch語句中若case語句沒有break,會出現(xiàn)什么問題?
* case是入口標(biāo)號。執(zhí)行完一個case標(biāo)號后面的語句后,就從此標(biāo)號開始執(zhí)行下去,不再進(jìn)行判斷;
* 因此若沒有break,將繼續(xù)執(zhí)行;
* M380代碼舉例:
* case SYNC_SVC:
* case SYNC_VF:
* case ASYNC_VF:
* if(gMainStatus.RunStep == STATUS_SPEED_CHECK)
* {
* gOutVolt.Volt = gFeisu.VoltCheck;
* gMainCmd.FreqSyn = gFeisu.SpeedCheck;
* gMainCmd.FreqToFunc = gMainCmd.FreqSyn;
* gVFPar.FreqApply = gMainCmd.FreqSyn;
* gOutVolt.VoltPhaseApply = (gFeisu.SpeedLast > 0) ? 16384 : -16384;
* }
* break;
* switch(表達(dá)式),表達(dá)式的值必須為整型。

18,19、for語句的執(zhí)行過程計算sum值。
* for(expression1;exp2;exp3),exp1為初始化部分,只在循環(huán)開始時執(zhí)行一次;exp2為條件部分,在循環(huán)體每次執(zhí)行前都要執(zhí)行一次;exp3為調(diào)整部分,在循環(huán)體每次執(zhí)行完畢后,在條件部分執(zhí)行前執(zhí)行。
* 等價于:
* exp1;
* while(exp2)
* {
* 循環(huán)體;
* exp3;
* }
* for語句中也可以使用break和continue。break指直接退出整合for循環(huán);continue指結(jié)束本次循環(huán),直接執(zhí)行調(diào)整部分。
* for用于循環(huán)處理對比while的優(yōu)點(diǎn)?
* for循環(huán)將操作循環(huán)的表達(dá)式收集在一次,當(dāng)循環(huán)體較大時,該優(yōu)點(diǎn)較突出;

20、如何為二維數(shù)組賦值?
* 二維數(shù)組: float A[4][4];行列引用都從0開始。A[4][4]的引用是錯誤的;
* 初始化方式1:
* A[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
* 初始化方式2:
* A[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
* 初始化方式3:
* A[4][4]={{1},{2},{3}};
* 部分賦值;

21、字符數(shù)組末尾’\0’的作用,常量數(shù)組末尾有無‘\0’?
* 為弱化字符數(shù)組的寬度,采用’\0’作為字符數(shù)組的結(jié)束標(biāo)志;

22、有參函數(shù)調(diào)用,什么是實(shí)際參數(shù),什么是形式參數(shù)?
* 主調(diào)函數(shù)吧實(shí)際參數(shù)的值傳遞給被調(diào)用函數(shù)的形式參數(shù);
* 定義函數(shù)時,函數(shù)名后為形參列表;調(diào)用函數(shù)時:函數(shù)名后時實(shí)參列表;
* 類型名 函數(shù)名(形參列表)
* {
* 函數(shù)體
* }
* 有參函數(shù)調(diào)用采用值傳遞;指針作為形參,相當(dāng)于傳址調(diào)用。會更改實(shí)參的值;
* 函數(shù)返回: return x; 或 return(x);返回值類型由函數(shù)類型決定。

23、定義函數(shù)時,需要在函數(shù)名前增加類型名,類型名與什么有關(guān)?
* 定義函數(shù)時需要指定函數(shù)的類型標(biāo)識符。以便指定函數(shù)帶回來的值的類型。無返回值的函數(shù)類型用void。
* 類型名決定了函數(shù)返回值的數(shù)據(jù)類型。

24、函數(shù)的聲明?作用?怎么進(jìn)行聲明?
* 當(dāng)要被調(diào)用函數(shù)的定義位置在調(diào)用它的函數(shù)的后面,應(yīng)該在主調(diào)函數(shù)中對被調(diào)用的函數(shù)做聲明。
* 函數(shù)聲明:把函數(shù)名,函數(shù)參數(shù)個數(shù),參數(shù)類型等信息通知編譯系統(tǒng),以便將進(jìn)行合法性檢查。確保函數(shù)被正確調(diào)用。
* 進(jìn)行原型聲明最安全的方式:
* 將原型置于一個單獨(dú)的文件,當(dāng)其他源文件需要這個函數(shù)的原型時,采用#include 包含該文件;
* 避免多次拷貝錯誤,也方便維護(hù)。
* 舉例:M380–MotorSvcInclude.h
* /供外部引用函數(shù)聲明****/
* void ResetSVC(void);
* void SVCCalRotorSpeed(void);
* void SvcCalOutVolt(void);
* void SVCCalFlux_380(void);
* void SvcCalOutVolt_380(void);
* void SVCCalRotorSpeed_380(void);
* #include “MotorSvcInclude.h”

25,26、變量的定義方式?main里定義的變量能否在其他函數(shù)中應(yīng)用?
* 局部變量和全局變量
* 定義變量的3種情況;
* 1) 在函數(shù)的開頭定義;
* 2)在函數(shù)內(nèi)的復(fù)合語句內(nèi)定義;
* if (tickerTempDeal >= TEMPERATURE_CALC_PERIOD / TEMPERATURE_CALL_PERIOD) // 時間錯開
* {
* Uint32 k;
* LINE_STRUCT aiLine = LINE_STRTUCT_DEFALUTS;
*
* Uint16 p = &funcCode.code.aiCalibrateCurve[2].before1; // 實(shí)測電壓
* #define MOTOR_T_SENSOR_AI_MAX_VOLTAGE_IDEA 3300 // 3300mv
* // 獲取溫度檢測的采樣電壓
* k = (4095L << 4) * tickerTempDeal / MOTOR_T_SENSOR_AI_MAX_VOLTAGE_IDEA;
* temperatureVoltageOrigin = tempSampleSum / k;
* // 電機(jī)溫度傳感器AI2采樣校正曲線
* aiLine.mode = 1; // 不限幅
* aiLine.y1 = ((int32)(int16)((p + 0)) * 0x7FFF) / MOTOR_T_SENSOR_AI_MAX_VOLTAGE_IDEA; // (理想)輸入電壓1,精密儀器測量電壓
* 3)在函數(shù)的外部定義;
* 1)2)都屬于局部變量,3)為全局變量;作用域?yàn)槎x位置以后;
* main中定義的變量也只在main中有效,并不因?yàn)樵谥泻瘮?shù)中定義二在整個文件或程序中有效;
* 局部變量由于作用范圍小,因此不同函數(shù)可以采用相同的局部變量名;全局變量在程序執(zhí)行過程中都占用存儲單元;全局變量時程序耦合復(fù)雜,降低程序的可讀性和可維護(hù)性,因此應(yīng)減少全局變量的使用。

27,28,29,30、什么是靜態(tài)存儲區(qū),動態(tài)存儲區(qū),動態(tài)存儲區(qū)存放哪些數(shù)據(jù)?
* 靜態(tài)存儲區(qū)指程序運(yùn)行期間,由系統(tǒng)分配固定的存儲空間的方式。而動態(tài)存儲區(qū)是程序運(yùn)行期間根據(jù)需要進(jìn)行動態(tài)的分配存儲空間的方式。
* 全局變量存放在靜態(tài)存儲區(qū);
* 函數(shù)形參,自動變量,函數(shù)調(diào)用的現(xiàn)場保護(hù)和返回地址存放在動態(tài)存儲區(qū);即堆棧中。
* 變量定義由兩部分構(gòu)成:存儲類型,數(shù)據(jù)類型。存儲類型:auto, static, register, extern
* auto
* 不聲明為static的局部變量、形參都是auto類型;auto可以省略;
* static
* 局部變量在函數(shù)調(diào)用結(jié)束后不消失,而保留原值,存儲單元不釋放;用static。即靜態(tài)局部變量;
* 局部變量加static后,作用域仍然在該代碼塊中或該函數(shù)中有效;
* 會降低程序可讀性;
* 全局變量 加 static
* 將外部變量的作用域限制在本文件中
* 靜態(tài)外部變量,便于程序的模塊化;
* register
* 寄存器變量存儲在CPU的硬件寄存器中,存取速度快;
* extern
* 外部變量聲明;用于作用域擴(kuò)展;
* 全局變量作用域擴(kuò)展到其他文件方法
* 在一個文件中定義外部變量;
* 在另一個文件中用extern對該變量聲明;

31、變量的定義和聲明的區(qū)別?
* 定義也稱:定義型聲明,聲明也稱:引用型聲明;
* 定義會建立存儲空間;
* 變量的定義只能出現(xiàn)一次,聲明可以出現(xiàn)多次;
* int a;為定義 ;extern int a;為聲明;
* 1. 不要把變量定義放入.h文件,這樣容易導(dǎo)致重復(fù)定義錯誤。
* 2. 盡量使用static關(guān)鍵字把變量定義限制于該源文件作用域,除非變量被設(shè)計成全局的。
* 3. 可以在頭文件中聲明一個變量,在用的時候包含這個頭文件就聲明了這個變量。
* function.c的神奇之處。

32、內(nèi)部函數(shù)和外部函數(shù)的區(qū)別?
* 內(nèi)部函數(shù)
* static 類型名 函數(shù)名(形參列表);
* 表示該函數(shù)只能被本文件中的其他函數(shù)調(diào)用;
* 外部函數(shù)
* 定義函數(shù)時,加extern表示為外部函數(shù),省略extern則默認(rèn)為外部函數(shù),可供其他文件調(diào)用;

33,34、指針是什么?什么是指針變量?
* 指針就是變量的地址,或者函數(shù)首地址;地址形象化稱為指針;
* 指針的兩個信息:內(nèi)存編號,指向的數(shù)據(jù)類型(只有指定數(shù)據(jù)類型,才能確定尋址方式);
* 指針是帶類型的地址;
* 如果用一個變量專門存放另一個變量的地址,則它稱為指針變量;
* DSP2812為32位處理器,意味著指針變量需要32位表示;
* 運(yùn)算符: * (指針運(yùn)算符) & (取地址運(yùn)算符)
* 指針變量的定義和引用:
* int p;指:p為指向整型數(shù)據(jù)的指針變量; 而不是int p;
* 變量是p,而不是*p;
* p=&a;
* 例子: *100=25? 錯誤
* 正確寫法:
* *(int *)100=25; //*的對象必須是指針變量,因此先將100強(qiáng)制類型轉(zhuǎn)換為整形指針變量,再賦值,即將地址100中放置整型數(shù)據(jù)25。
* 指針變量作為形參實(shí)現(xiàn)傳址調(diào)用的應(yīng)用
* MD380傳址調(diào)用代碼舉例:
* void inline UVWToAlphBetaAxes(UVW_STRUCT_Q24 * uvw, ALPHABETA_STRUCT * AlphBeta)
* {
* AlphBeta->Alph = ((llong)uvw->U * 23170L)>>15;
* AlphBeta->Beta = ((llong)((long)uvw->V - (long)uvw->W) * 13377L)>>15;
* }
* inline 關(guān)鍵字 :表示內(nèi)聯(lián)函數(shù)。 內(nèi)聯(lián)函數(shù)在可讀性方面與函數(shù)是相同的,而在編譯時是將函數(shù)直接嵌入調(diào)用程序的主體,省去了調(diào)用/返回指令,這樣在運(yùn)行時速度更快。
* C語言允許直接訪問物理地址,可直接對硬件進(jìn)行操作。C語言同時具有高級語言的功能,又具有低級語言的功能,C語言的這種雙重性,使c語言不僅成為系統(tǒng)描述語言優(yōu)勢通用的程序設(shè)計語言。

35、采用指針引用數(shù)組變量:
* 指針可以進(jìn)行加法和減法運(yùn)算。計算結(jié)果是另一個指針。由于指針存放的是地址,所以指針加法的含義是指向n后的地址。n由指針變量的類型確定。
* p+=3指數(shù)組的第四個元素的地址;

36、int *p[4]; 和 int (p)[4]的區(qū)別是什么?
* int p[4]; 指針數(shù)組。
* []的優(yōu)先級高于,所以P[4]首先是一維數(shù)組,之后和結(jié)合,表示對數(shù)組元素間接訪問操作后是一個整形。所以:每個元素中存放的是一個整形變量的地址;也就是說該數(shù)組存放了四個變量的地址。
* int (*p)[4] 一維數(shù)組的指針變量。
* *p表示p是一個指針;[4] 表示指針指向的對象的類型是具有4個元素的數(shù)組;int 表示該數(shù)組的元素是int類型的.
* (*p)[4]表示每個元素是一維數(shù)組的首地址,一共保存了4個一維數(shù)組的首地址。

37、什么是函數(shù)指針,函數(shù)指針的應(yīng)用有哪些?
* 函數(shù)編譯時,會把函數(shù)的源代碼轉(zhuǎn)換為可執(zhí)行代碼并分配存儲空間。這段代碼有一個起始地址。每次調(diào)用該函數(shù)時,從該入口開始執(zhí)行。函數(shù)名就是該入口地址。因此函數(shù)名就是函數(shù)的指針。代表函數(shù)的起始地址。
* 可以定義一個指向函數(shù)的指針變量。存放某一個函數(shù)的起始地址。
* int (*p)(int,int);
* p=max;c=(*p)(a,b);
*
* 用函數(shù)名調(diào)用函數(shù)只能調(diào)用一個函數(shù),而采用函數(shù)指針調(diào)用函數(shù),可以通過函數(shù)指針的不同賦值調(diào)用不同的函數(shù)。
* 比如調(diào)用同步機(jī),異步機(jī)的矢量控制代碼。

38、函數(shù)指針定義格式和引用格式?
* 類型名 (*指針變量名)(函數(shù)參數(shù)列表)
* eg: int (*p)(int ,int )
* 特征: 指針變量后有括號。說明是函數(shù)指針。
* 函數(shù)指針只能指向具有特定特征的函數(shù)。因而所有被同一指針運(yùn)用的函數(shù)必須具有相同的參數(shù)和返回類型。
* 引用格式:

* 1、函數(shù)指針的定義;* typedef struct { int32_lib Ref; int32_lib Fdb; int32_lib Err; int32_lib Kp; int32_lib Up; int32_lib Ui; int32_lib Ud; int32_lib OutPreSat; int32_lib OutMax; int32_lib OutMin; int32_lib Out; int32_lib SatErr; int32_lib Ki; int32_lib Kc; int32_lib Kd; int32_lib Up1; int16_lib Kamp; void (*calc)(); void (*calc32)(); void (*reset)(); } PID_LIB; typedef PID_LIB *PID_handle_lib;* 2、指針賦值;* PID_LIB pid_Udc_lib = PID_DEFAULTS_LIB; * #define PID_DEFAULTS_LIB { 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ (void (*)(Uint32_lib))pid_calc_lib, \ (void (*)(Uint32_lib))pid32_calc_lib, \ (void (*)(Uint32_lib))pid_reset_lib}* void pid_reset_lib(PID_handle_lib);void pid_calc_lib(PID_handle_lib);void pid32_calc_lib(PID_handle_lib);
  • Int *p(int x,int y);和int (*p)(int x,int y)的區(qū)別?
    • 指針函數(shù)。 Int *p(int x,int y) p先與括號運(yùn)算符結(jié)合,表示p為函數(shù)形式。再與 * 運(yùn)算符結(jié)合表明p是指針。
    • Int *p(int x,int y) 返回值為變量的地址。
    • 含義:函數(shù)計算完成后返回一個地址作為返回參數(shù)。
    • 運(yùn)算符優(yōu)先級中:括號運(yùn)算符優(yōu)先級最高。
  • 40、什么是動態(tài)內(nèi)存分配?
    * malloc所分配的是一塊連續(xù)的內(nèi)存,以字節(jié)為單位,并且不帶任何的類型信息free用于將動態(tài)內(nèi)存歸還系統(tǒng)void* malloc(size_t size);void free(void* pointer);
    * 返回指針的值是所分配內(nèi)存區(qū)域中第一個字節(jié)的地址,當(dāng)分配內(nèi)存失敗時,返回空指針。
    * 動態(tài)內(nèi)存分配是C語言中的強(qiáng)大功能程序能夠在需要的時候有機(jī)會使用更多的內(nèi)存

    41、如何聲明結(jié)構(gòu)體類型?
    * 結(jié)構(gòu)體是用戶自定義類型的一種。
    * 是一種聚合數(shù)據(jù)類型。
    * 聲明的幾種形式。
    * 1.先聲明結(jié)構(gòu)體類型,再定義該類型變量:struct UDP_Server_Thread_Para{void *pData;int Len;};UDP_Server_Thread_Para UDPThreadPara1,UDPThreadPara2;2.在聲明的同時定義變量:struct UDP_Server_Thread_Para{void *pData;int Len;}UDPThreadPara1,UDPThreadPara2;3.不指定類型名直接定義結(jié)構(gòu)體類型變量:struct{void *pData;int Len;}UDPThreadPara1,UDPThreadPara2;42、什么是結(jié)構(gòu)體數(shù)組,如何聲明結(jié)構(gòu)體數(shù)組?
    * struct STUDENT stu[10];
    * 該結(jié)構(gòu)體數(shù)組,共有 10 個元素,每個元素都是一個結(jié)構(gòu)體變量,都包含所有的結(jié)構(gòu)體成員。

    43、P.student, (*p).student , p->student 的區(qū)別和聯(lián)系?
    *

    44、關(guān)鍵字 typedef的作用?
    * typedef是在計算機(jī)編程語言中用來為復(fù)雜的聲明定義簡單的別名,它與宏定義有些差異。
    * 在編程中使用typedef目的一般有兩個,一個是給變量一個易記且意義明確的新名字,另一個是簡化一些比較復(fù)雜的類型聲明typedef int int16_lib;typedef long int32_lib;typedef unsigned int Uint16_lib;typedef unsigned long Uint32_lib;typedef float float32_lib;typedef long double float64_lib;typedef long long int64_lib;typedef unsigned long long Uint64_lib;

    軟件工程師的基本素養(yǎng):
    * 編程語言的熟悉,既編程速度的加快;
    * 代碼質(zhì)量的提高,既編寫出的代碼漏洞少、缺陷密度低;
    * 以及編程風(fēng)格改善,代碼易于閱讀、魯棒性好;
    * 代碼安全性好,能考慮到多種安全場景,避免遺留安全方面的坑。

    靜態(tài)測試 是對代碼進(jìn)行掃描分析,檢測它的語法規(guī)則復(fù)雜度等是否符合要求,它主要是為軟件的質(zhì)量保證提供依據(jù),以提高軟件的可靠性和易維護(hù)性。靜態(tài)測試主要包括:
    * 編程標(biāo)準(zhǔn)驗(yàn)證;
    * 數(shù)據(jù)流分析技術(shù);
    * 質(zhì)量度量信息;
    * 代碼結(jié)構(gòu)可視化顯示;
    * 測試外殼的創(chuàng)建
    *
    * 動態(tài)測試 是使被測代碼在相對真實(shí)環(huán)境下運(yùn)行,從多角度觀察程序運(yùn)行時能體現(xiàn)的功能、邏輯、行為、結(jié)構(gòu)等的行為,以發(fā)現(xiàn)其中的錯誤現(xiàn)象。對于嵌入式系統(tǒng),要想保證測試的真實(shí)性,就需要將被測代碼下載到目標(biāo)板運(yùn)行,并且測試系統(tǒng)不要影響目標(biāo)系統(tǒng)的運(yùn)行,就需一定硬件支持。動態(tài)測試主要包括:
    * 功能的測試;
    * 代碼覆蓋率 (CodeCoverage);
    * 性能分析測試;
    * 內(nèi)存分析;
    * 邏輯觸發(fā)執(zhí)行跟蹤;
    * 實(shí)時多任務(wù)操作系統(tǒng)分析。

    * 另一種靜態(tài)分析工具:logiscope * 1、audit 審查檢查工具 * 2、rulechecker 靜態(tài)百合

    總結(jié)

    以上是生活随笔為你收集整理的谭浩强《c语言程序设计》第四版--重点难点总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。