C部落格作業05 指標

2022-05-30 12:51:10 字數 4249 閱讀 3275

展示關於「指標題目集」分數截圖。

//這裡的變數名arr裡面存放的有該陣列的第乙個資料的位址也就是arr[0]的位址值

//所以可以認為arr就是該陣列的指標

int *p=arr;

int *arr=;

int a =100;

int *p1 = &a;

int **p2 = &p1;

指標變數也是一種變數,也會占用儲存空間,也可以使用&獲取它的位址。c語言不限制指標的級數,每增加一級指標,在定義指標變數時就得增加乙個星號*。p1 是一級指標,指向普通型別的資料,定義時有乙個*;p2 是二級指標,指向一級指標 p1,定義時有兩個*。你想是幾級的指標,p前面就加幾個*。

* 行指標;

行指標,顧名思義就是指向一行的指標。在二維指標中,行指標用的最多。我們通常把二維指標看成乙個行列式,但是它在記憶體中的排序卻是和一維指標一樣的。比如組a[2][3]=},a是整個陣列的首位址,同時也指向第一行元素,即a是乙個行指標,它每加1,所指位址移動二維陣列的一行,a+1指向第二行元素。對a取*,即*a指向第一行第乙個數,*(a+1)指向第二行第乙個數,可見,對行指標取值就成了列指標,此時它還是個指標。它每加1,所指位址移動乙個元素,*(a+1)+1指向第二行第二個元素,也可以寫成a[1]+1。**a(也可寫成a[0][0])就是這個二維陣列第一行的第乙個元素,**(a+1)(也可寫成a[1][0])就是第二行的第乙個元素,*(*(a+1)+1)(也可寫成a[1][1])是第二行的第二個元素。可見,對行指標取2次*就成了某個元素的值了,而不再是位址。

指標可以作為函式的引數傳給函式,那麼也一定可以作為函式的返回值,返回給呼叫函式。比如,寫乙個返回兩者之中較長字串的函式的示例**:
#include#includechar *compare(char *str1,char *str2)else if(strlen(str1)用指標作為函式返回值時需要注意的一點是,函式執行結束後會銷毀在它內部定義的所有區域性資料,包括區域性變數、區域性陣列和形式引數等,函式返回的指標請盡量不要指向這些臨時資料,誰都不能保證這些臨時的資料一直有效,它們在後續使用過程中可能會引發執行時錯誤。

之前聽說,c語言有兩大利器:指標和強制轉化。其中指標更是c語言的靈魂。過了指標這一關才算是真正學習了c語言。剛開始接觸的時候感覺一臉懵,完全不知道指標的作用是什麼。書上的文字描述也比較生澀難懂,一度不知道該如何學習c。直到上課的時候,老師講指標就像是乙個行走的箭頭,它會走向你想要的物件的位址,在我腦海裡形成了完整的執行圖。後來對於二級指標的理解也就更加深刻了。這一部分比較難,學起來也比較吃力,尤其是在自己編寫**的時候,所以可能還是自己沒有用足夠多的時間在這上面才會這樣吧。

時間

**量十三周

1103

十四周1002

函式定義

定義字元變數op;

定義陣列str[m];

定義迴圈變數i;

定義整型變數len計算陣列長度;

輸入字串存入字元陣列中以及輸入要查詢的字元;

自定義乙個search函式搜尋字元所在的位置;

if (search(str, op) != null)

else

char* search(char* str, char op)

return p;返回指標;

(1)如何利用指標做函式的返回值來解決問題;

char* p;//定義乙個指標,用來儲存找到字元的位址,作為返回;

p = null;

for (str; *str != '\0'; str++)

}return p;

(2)要知道計算陣列長度要用strlen()函式,但是這個函式後面的括號中不能為空指標(null)。

1.多種錯誤:開始的時候並沒有好好理解題目,所以多種錯誤;

2.部分正確:之前的做法是在函式內部定義了乙個整型變數,返回值的時候返回這個整數值,但是呢,這是乙個指標型的函式,所以錯誤了;

3.部分正確:計算陣列長度要用strlen()函式,但是這個函式後面的括號中不能為空指標(null);我開始的做法是在主函式裡面定義乙個index;用strlen()來計算它的下表,這樣的作法會令大部分測試點過去,但是第乙個測試點過不去;

4.全部正確:終於等到你。。。

定義指標*p記錄子串查詢結果;

定義字元陣列mother[81],son[81]分別輸入母串和子串;

定義整型變數len計算子串長度;

輸入母串;

輸入子串;

while (p = strstr(mother, son)) != null 如果strstr函式返回值不為null,證明有查詢到子串,這裡用了strstr函式;

*p = '\0'; 將找到子串的位置賦乙個結束符『\0』

len=strlen(son);計算字串的長度;

strcat(mother, p + len); 跳過字串長度個數,將字串的後半部分複製到結束符之前的部分

end while

輸出母串;

extern char  * strstr(char  * str1, const char  * str2);
語法:

* strstr(str1, str2)
str1: 被查詢目標 string expression to search.

str2 : 要查詢物件 the string expression to find.

返回值:若str2是str1的子串,則返回str2在str1的首次出現的位址;如果str2不是str1的子串,則返回null。

例子:

char  * strstr(const char * s1, const char * s2)

return null;

}

1.多種錯誤:沒有用strstr()函式的時候覺得很麻煩,尤其是子串找完一次之後再繼續找。所以多種錯誤;

2.編譯錯誤:!與=之間多打了乙個空格;

3.全部正確:終於等到你。。。

void inv(int* x, int n)

{ 函式定義

定義乙個整型指標;

定義乙個整型變數i;

定義整型變數t;

指標的簡單運用,利用指標的遍歷解決首尾交換的問題,理解指標的用法。

1.答案錯誤:沒有理解交換之間的關係,導致出現了錯誤;

2.全部正確:。。。

這是乙個解決合併兩個有序陣列問題的乙個方法。和老師講的不一樣的是,它運用了倒序進行比較的方法,大大減少了**量。但是呢,這種方法還是無法通過較大資料量的測試點。所以,還有下面的方法:

將指標p1 置為 nums1的開頭, p2為 nums2的開頭,在每一步將最小值放入輸出陣列中。便於理解。

C部落格作業05 指標

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

C部落格作業05 指標

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

C部落格作業05 指標

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.動態記...