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代表指標指標變數指向的變數的值。乙個函式在編譯時被分派乙個入口位址,...