C部落格作業05 指標

2022-05-18 14:57:18 字數 3397 閱讀 1241

1.指標做迴圈變數做法

基本做法如下:

int a[10];

int *p;

p=a;//指標指向a陣列的首位址

fgets(a,10,stdin);

for(p=a;*p!='0'&&*p!='\n',p++)

2.字元指標如何表示字串

基本做法如下:

char str="abc";

char *p;

for(p=str;*p!='0'&&*p!='\n',p++)

3.動態記憶體分配

1.動態記憶體分配的步驟

(1)了解需要多少記憶體空間。

(2)利用c語言提供的動態分配函式來分配所需要的儲存空間。

(3)使指標指向獲得的記憶體空間,以便用指標在該空間內實施運算或操作。

(4)當使用完畢記憶體後,釋放這一空間。

2.動態儲存分配函式

1.malloc()

函式原型是 :void * malloc(unsigned size)

2.calloc()

函式原型是 :void * calloc(unsigned n,unsigned size)

兩者的區別僅在於calloc函式在分配後還把儲存塊裡全部初始化為0,而malloc函式不會。

3.動態儲存釋放函式free()

函式原型為 :void free (void * ptr)

這個函式十分關鍵卻又經常被人遺忘,故最好在使用動態儲存分配函式時,自動先在後面補上free函式。

4.指標陣列及其應用

1.指標陣列的定義

一維指標陣列定義的一般格式為:

型別名 *陣列名[陣列長度];

char * color [5];

2.指標陣列的應用

可以用指標陣列處理多個字串

如課本p269頁char*pcolor=;

4.二級指標、行指標

1.二級指標

二級指標,也稱指向指標,一般定義為:

型別名**變數名;
2.行指標

行指標出現在二維陣列中

如二維陣列a[2][3];

a[0]代表的是二維陣列第零行的首位址相當於&a[0][0];

a[1]代表的是二維陣列第一行的首位址相當於&a[1][0];

a[0]+1代表的是二維陣列第零行,第一列的位址相當於&a[0][1];

5.函式返回值為指標

當函式返回值的型別是指標時,要返回某個指標,不過要注意的是,不能在實現函式時返回在函式內部定義的區域性資料物件的位址,

這是因為所有的區域性資料物件在函式返回時就會消亡,其值不再有效。

2.1.1 偽**

定義乙個指標陣列months[13];

months[0]表示wrong input!,其餘的分別表示月份

if (n < 1或n>12)n = 0;end if;

return 英文月份;

2.1.2**截圖

2.1.3總結本題的知識點

這題是指標陣列的簡單運用,但一開始我的做法不是指標陣列,而是用二維陣列,但是後來發現二維陣列是在函式內部定義的,函式結束時,它的生存期只在函式內部,所以不能用二維陣列。

2.1.4pta提交列表及說明

1.部分正確:使用的是二維陣列,如上總結,本題不能使用二維陣列,要用指標陣列。

2.2.1 偽**

定義左右端點和中間點left,right,mid;

while(left<=right)

mid = (left + right) / 2;//二分

(*count)++;

if (中間值=key])return mid;end if

else if (中間值》key)right = mid - 1;end else if

else left = mid + 1;end else

}

2.2.2**截圖

2.2.3總結本題的知識點

形參*count是乙個指標,函式中不能像之前那樣count++,而是要(*count)++

2.2.4pta提交列表及說明

答案錯誤:一開始寫的是*count++,沒有括號,後來發現及時改正。

2.3.1偽**

主串s:the c programming language

子串t:ram

char *search(char *s,char *t)

// 相同字元,則2指標同時移動

若子串在結束符,則返回子串在主串起始位址

若子串不在子串起始位址,則tptr=t,sptr 不動

sptr++ ;

}找不到,返回null

}

2.3.2**截圖

2.3.3總結本題的知識點

指標為null的狀態,返回字串所在位置:位址相減。字元相同,同時遍歷2個字串。

2.3.4pta提交列表及說明

1.**功能:在 haystack 字串中找出 needle 字串出現的第乙個位置,即實現strstr函式。通過兩個標記對字串進行遍歷,進行邊界處理之後,使用 k 進行角標標記,first 用於 撥正 i 迴圈的起點。

2.**優點:與pta上做的查詢子串不同,他進行了兩次標記進行遍歷,當needle是空字串時,要返回0。

C部落格作業05 指標

展示關於 指標題目集 分數截圖。每個知識點具體展開介紹。包括指標如何指向字串 字串相關函式及函式 原型的理解 字串相關函式用法 擴充套件課堂未介紹內容 具體格式是什麼,注意事項。為什麼要動態記憶體分配,堆區和棧區區別。動態記憶體分配相關函式及用法。舉例為多個字串做動態記憶體要如何分配。多個字串用二維...

C部落格作業05 指標

格式 datatype name value 定義格式 int p 定義,定義時必須帶 float p1 a char p2 c p1 b p2 d 賦值,在定義的同時賦值需要帶,單獨賦值時不能帶,因為p代表指標變數的值,即位址。p代表指標指標變數指向的變數的值。乙個函式在編譯時被分派乙個入口位址,...

C部落格作業05 指標

名說明a二維陣列名是乙個二級指標,即a 0 的位址 a 0 一級指標,即a 0 0 的位址 a i第i行的位址 a i 第i行首元素的位址,等價於a i a i 第i行首元素的值 指標這塊內容確實比較難理解,我pta上的大多數題目都是用陣列的操作思維完成的,現在通過部落格重新過了一遍書本的內容,發現...