C部落格作業05 2019 指標

2022-06-01 05:45:08 字數 3288 閱讀 4845

1.1.1,指標定義:

int *p;

float *p;

char *p;直接對位址進行操作

指標被定義後,需先賦值後使用(指標賦初值時,只能賦給相同型別的指標)

不能用數值賦初值,但可以初始化為0,即null;

輸出時可以用printf("%.*s",len,p)[len表示輸出長度,p表示需要輸出的位址]

1.1.2,指標作函式引數

swap(&a,&b);

void swap(char *apstr,char *bpstr);

傳入為位址,指標接收(可以傳出多個數值)

1.1.3,陣列作函式引數

int a[10];

array(a);

void array(int *p);

在使用時可以用陣列形式,也可以用指標形式(即p[mid]可以寫為*(p+mid))

1.1.4,字元指標

字元指標和字元陣列都可以用來處理字串,比如:

char sa="hello";

char *sp="hello";

字元陣列占用的是一塊連續的單元,而字元指標占用的是乙個可以存放位址的記憶體單元

1.1.5動態分配

p=(int *)malloc(n*sizeof(int))

動態釋放函式free(p)

malloc對分配的地方不做任何事,而calloc進行初始化

1.1.6指標陣列,二級指標,行指標

一維指標陣列定義:型別名  *陣列名【陣列長度】

二級指標:型別名* *變數名;

*變數名 代表的是位址,**變數名代表的是內容

二維陣列用二級指標表示,可以用下標操作也能用指標操作:

*(a[i]+j)可以寫成*(*(a+i)+j)

定義二維陣列時必須指明列長度

輸入多個字串時,可以用動態分配來處理,每次輸入時對每行動態分配空間

1.1.7 指標做函式返回值及其注意

char* search(char* s,char *p)

pos=search(s,p)

返回的需是位址

不能返回在函式內部定義的區域性資料物件的位址

1.在指標這章,我明顯感覺到了指標的麻煩,每次在編譯時,時不時的就有什麼訪問許可權衝突,溢位呀之類的錯誤,確實比前面的內容要難一些,有時候最難的就是分不清到底我要定義的是一級指標還是二級指標,總的來說,學習了新的內容,掌握了新的知識,也是成長,也為之感到高興;

2.**量:本週500行**

函式定義

1:注意當字串數量為1時,情況不一樣,需分開討論

if(n==1)

2:strlen函式的用法,用來計算字串的長度,需包含在string.h的標頭檔案中,如果另寫**完成此功能會增加不必要的**量

3.函式傳入陣列的做法

說明:解決:在判斷完第一次時,再判斷第二個字元是否大於len

2.部分正確:沒有考慮字串長度為1的情況

解決:在結束迴圈後,判斷n是否為1,為1直接返回長度

int main

1.輸出字串時,可以用下面的方法輸出,可以想輸出多少就輸出多少字元

printf(" %.*s", len + 1, ptre);(len+1表示輸出長度)(pstr表示輸出的字串)

2.第乙個字元不為空格時,需要另外討論,因為前乙個字元不存在

3.每次輸出完時,要記得令len的長度為0

4.flag的靈活控制

5.怎麼找字串單詞,即當前字元是非空格,而前乙個字元是空格

if(*p!=' '&&*(p-1)==' ')

說明:

部分正確:最後判斷第乙個字元時,直接輸出,沒有考慮是否只是乙個單詞的情況

解決:靈活運用到flag來判斷他是否執行以上的迴圈

部分正確:在編譯器上執行除錯的時候,並沒有加flag進去判斷,輸出的開頭也是錯誤的

解決:加入flag判斷是否為第乙個字元來控制格式

答案錯誤:在編譯器上執行時,最後if判斷裡len的長度沒加1,導致程式在while裡的len是指向第乙個字元的,並沒有加上它的長度

解決:len+1,把第乙個字元也輸出

指標函式定義

1.指標作函式返回值,返回的必須是位址

char* search(char* s,char *p)

pos=search(s,p)

2.學習指標為空時的狀態,返回空指標

3.子串指標回到起始位置時,主串不移動,continue的靈活運用

說明:(雖然在pta是一次就過,但在vs上遇到了一些錯誤)

部分正確:在判斷子串沒結束時,沒加continue,導致有些情況存在找不到子字串的情況;

解決:加上continue後,主串不進行移動,繼續從原字串的位置開始判斷;

部分正確:沒有定義新的字串,在後面時找不到原來字串的位置;

解決:根據超星平台上的做法,定義兩個指標指向傳入的字串。當我們要對字串進行操作時,最好定義乙個新的字串指向它,防止找不到原來位置;

1.while(m--)的操作,將兩步合在一起,即m--,又判斷m是否為0的兩步操作

2.還有就是平時並沒有巨集定義的習慣,認為沒必要,但看到上面這篇題解,沒有巨集定義的話,如果要修改maxn的值便更加麻煩了

3.以及memset函式的用法

4.ready()以及這個函式,雖然沒傳入引數,但它將一部分功能分裝在裡面,應該會使主函式看起來更加簡單明瞭

C部落格作業05 2019 指標

既然指標變數是存放位址的,然而正常使用是不會去糾結位址,那麼為什麼要指標變數?其實指標變數前加上 號就代表位址上的值,那為何不直接用變數而是用指標變數然後再指向變數呢?這就要提到指標的好處了 a.為函式提供修改呼叫變元的靈活手段 b.支援c 動態分配子程式c.可以改善某些子程式的效率 在資料傳遞時,...

C部落格作業05 指標

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

C部落格作業05 指標

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