c語言作業8(12.6)10題

1.簡述Makefile的作用
Makefile是一種工程的編譯方法,它擁有非常強大的組織流程的能力。
Makefile 通常是和 make 命令一起配合使用,很多大型項目的編譯都是通過 Makefile 來組織的。 如果沒有 Makefile, 那很多項目中各種庫和代碼之間的依賴關係將會非常複雜。make是一個命令工具,它解釋Makefile 中的指令(規則)。
Makefile 文件描述了整個工程的編譯、連接等規則。其中包括:工程中的哪些源文件需要編譯以及如何編譯、需要創建哪些庫文件以及如何創建這些庫文件、如何最後產生我們想要的可執行文件。
Makefile帶來的好處就是“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。

2.sizeof與strlen的區別:
sizeof是運算符,用sizeof來返回類型以及靜態分配的對象、結構或數組所佔的空間(字節數),其值在編譯時就已經計算好了
strlen是函數,它的功能是計算字符串的長度,該長度不包括字符串結束標誌’\0’

3.什麼是野指針?如何避免野指針。
指向一個已刪除的對象或指向未申請的訪問受限內存區域的指針稱爲野指針。
定義時對指針進行初始化,指明其指向

4.c語言分配內存的方式有哪些?
c語言中常見的內存錯誤有哪些?
分配方式:靜態分配和動態分配
常見錯誤:
1)指針沒有指向一塊合法的內存
2)爲地址分配的內存太小
3)內存分配成功,但並未初始化
4)內存越界
5)內存泄漏
6)內存已經釋放,但還通過指針調用

5.static全局變量與普通變量的區別?
static局部變量與普通局部變量的區別?
static函數與普通函數的區別?

static全局變量與普通的全局變量有什麼區別:static全局變量只初使化一次,防止在其他文件單元中被引用;
static局部變量和普通局部變量有什麼區別:static局部變量只被初始化一次,下一次依據上一次結果值;
static函數與普通函數有什麼區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝

非靜態全局變量的作用域是整個源程序,而靜態全局變量其作用域受限,即只在定義該變量的源文件內有效,在同一源程序的其它源文件中不能使用它。

把局部變量改變爲靜態變量後是改變了它的存儲方式即改變了它的生存期。把全局變量改變爲靜態變量後是改變了它的作用域, 限制了它的使用範圍。

static函數與普通的函數作用域不同,前者盡在本文件中。
static函數與普通函數最主要區別是static函數在內存中只有一份,普通靜態函數在每次被調用中維持一份拷貝程序的局部變量存在於堆棧中

6.#include <> 和 #include “” 有什麼區別?
<>先去系統目錄中找頭文件,如果沒有在到當前目錄下找。所以像標準的頭文件 stdio.h、stdlib.h等用這個方法。
而""首先在當前目錄下尋找,如果找不到,再到系統目錄中尋找。 這個用於include自定義的頭文件,讓系統優先使用當前目錄中定義的。

7.char *const p; char const *p; const char *p 三者的區別。
char *const p:指針p的值不可修改,即指針是常量,但指針指向的內容是變量
char const *p:指針p所指向的單元的內容不可修改
const char *p:指針p指向的內容是常量
後面兩者意思相同

8.寫一個 宏MIN,這個宏輸入兩個參數並返回較小的一個。
另外,當你寫下面代碼時會發生什麼事? least = MIN(*p++,b);
#define MIN(a,b) ((a)>(b)?(a):(b))
指針p會自增兩次,這是宏定義的副作用

9.找出題中錯誤,並解釋
void test1()
{
char string[10];
char* str1 = “0123456789”
strcpy(string, str1);
}

字符指針str1所指向的字符串一共有11個字符,包括字符串結束標誌’\0’,而數組string只開闢了10個元素的空間(即10個字節),strcpy的賦值會造成數組的溢出

10.找出題中錯誤,並解釋
void GetMemory( char *p )
{
p = (char *) malloc( 100 );
}
void Test( void )
{
char *str = NULL;
GetMemory( str );
strcpy( str, “hello world” );
printf("%s", str);
}
要想修改指針的內容,需要定義二級指針,應把GetMemory函數的參數改爲二級指針**p,同時調用函數的時候實參爲&str

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章