C語言雜談:指標與陣列(下)
思維導圖
介紹
前接上文C 雜談之 指標與陣列 (一),接續往下談指標和陣列。
指標與陣列 ——承接上文進行擴充套件
你知道X = Y,在編譯執行過程中,是什麼樣嗎?
字元指標與函式
1> 字串是一個以”結尾的字元陣列。
看一個例子:printf接受的是一個指向字元陣列第一個字元的指標。
這個例子與下面兩個程式碼是一個道理.
2> 幾個常用字元函式的編寫。
1>>> strcat(s,t)函式,把t指向的字元複製到s指向的字元後面?——注意”
#include <stdio.h> #include <assert.h> /* strcat(ps, t): Copy the charactor pointed * by t append to the character pointed by s */ void *strcat(char *ps, char *t){ char *addr = ps; assert((ps != NULL) && (t != NULL)); while(*ps){ /* The s point to the last character */ ps++; } while(*ps++ = *t++){ /* Copy t append to the s*/ } return addr; } int main(){ char s[5] = "AB"; char *t = "E"; printf("%s\n", strcat(s, t)); return 0; }
注意:在strcat裡的兩個指標ps和t,方法結束後,這兩個函式都指向”後面,因為ps++操作是”先取結果,後自增”
記憶體變化:
2>>> 函式strend(s,t):字串t出現在字串s的尾部,返回1,否則返回0。
strend int strlen(char *p){ int iLen = 0; while(*p){ iLen++; p++; } return iLen; } /* strend:find t in s */ int strend(char *s, char *t){ int sLen = strlen(s); int tLen = strlen(t); if(tLen > sLen) return 0; while(*s) s++; while(*t) t++; for(;tLen--;){ if(*--t != *--s) return 0; } return 1; } int main(){ char *s = "Hell Wold , Chuanshanjia"; char *t = "Chuanshanjia"; printf("%d\n", strend(s, t)); return 0; }
3>>> strncpy(s,t,n) 將t中前n個字元複製到s中。
strncpy(s,t,n) #include <stdio.h> int strlen(char *p){ int i = 0; while(*p){ p++; i++; } return i; } /* t中最多前n個字元複製到s中 */ char *strncpy(char *s, char *t, int n){ char *addr = s; if(!strlen(s) || !n) return 0; int tLen = strlen(t); if(!tLen) return 0; if(tLen < n) n = tLen; // Move the pointer s to the last while(*++s) ; while(n--){ *s++ = *t++; } return addr; } int main(){ char s[20] = "Hell World "; char *t = "Chuanshanjia"; printf("%s\n", strncpy(s, t, 2222)); return 0; }
命令列引數
1.第一個引數(常用argc表示)(:執行時命令列引數數目;第二個引數(常用argv表示)是一個指向字串陣列的指標。
2.C語言規定,argv[0],表示啟動程式的名稱。
3.例項
執行結果:
記憶體分配:
解釋:
>> argv是一個指向指標陣列的指標。
所以接受引數也可以寫成:
結合上圖,我們可以這樣理解:從裡向外看
複雜宣告
1.閱讀——從右向左規則。
>> 規則符號:
———————————————————–
* 讀作”指向…的指標”
[] 讀作”…的陣列”
() 讀作”返回…的函式”
———————————————————–
下面兩個示例:
int *f() ; // f: 返回指向int型的指標
>>步驟:
1)找識別符號f:讀作”f是…”
2)向右看,發現”()”讀作”f是返回…的函式”
3)向右看沒有什麼,向左看,發現*,讀作”f是返回指向…的指標的函式”
4)繼續向左看,發現int,讀作”f是返回指向int型的指標的函式”
int (*pf)(); // pf是一個指標——指向返回值為int型的函式
1)識別符號pf,讀作“pf是…”
2)向右看,發現),向左看,發現*,讀作 “pf是指向…的指標”
3)向右看,發現”()”,讀作“pf是指向返回…的函式的指標”
4)向右看,沒有,向左看發現int,讀作”pf是指向返回int型的函式的指標”
總結
我最近著重看C,是因為我想深入瞭解一下PHP核心語言和伺服器模組開發。現在的C語言,能夠讓我更深入的瞭解計算機內部。
相關文章
- C語言 指標與陣列C語言指標陣列
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- c語言-運算子,陣列,指標C語言陣列指標
- C語言指標和陣列筆試題C語言指標陣列筆試
- (C語言)使用指標列印陣列的內容C語言指標陣列
- 指標陣列與陣列指標指標陣列
- C語言系列之 指標與陣列總複習視訊教程C語言指標陣列
- 指標陣列和陣列指標與二維陣列指標陣列
- C++語言程式設計筆記 - 第6章 - 陣列、指標與字串C++程式設計筆記陣列指標字串
- c程式設計--指標與陣列C程式程式設計指標陣列
- C陣列和指標陣列指標
- C語言指標C語言指標
- C語言陣列C語言陣列
- 陣列指標,指標陣列陣列指標
- C語言使用指標對陣列指定位置進行插入元素C語言指標陣列
- c語言字元陣列C語言字元陣列
- c語言的陣列C語言陣列
- C語言學習之:指標與字串C語言指標字串
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 二維陣列與指標陣列指標
- c語言指標彙總C語言指標
- C語言指標用法大全C語言指標
- C語言 函式指標C語言函式指標
- C語言指標筆記C語言指標筆記
- C語言基礎-指標C語言指標
- C語言指標學習C語言指標
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數
- C語言陣列與指標(Arrays and Pointers)關係解析-差不多是一回事兒C語言陣列指標
- c語言之解釋複雜指標C語言指標
- C語言知識彙總 | 51-C語言字串指標(指向字串的指標)C語言字串指標
- C語言知識彙總 | 56-C語言NULL空指標以及void指標C語言Null指標
- 陣列指標陣列指標
- C語言指標詳解(一)C語言指標
- C語言指標詳解(二)C語言指標
- C語言基礎-1、指標C語言指標
- c語言實現this指標效果C語言指標
- 搞清楚C語言指標C語言指標
- C語言指標基本知識C語言指標