陣列指標與指標陣列的理解

2021-08-27 20:39:35 字數 1491 閱讀 6619

在進行閱讀yolo原始碼的時候,由於其都是用c寫的,在指標方面,遇到了很多問題,現在就問題,對c進行更深的理解。

1.c當中的strcpy與strcat函式的區別

字串處理strcpy,strcat函式的用法:1)strcat是用來連線兩個字串的,原型是char *strcat(char *dest,char *src),作用是把src所指字串新增到dest結尾處(覆蓋dest結尾處的'\0')並新增'\0'2) strcpy是用來把字串拷貝到指定的地方的,原型是char *strcpy(char *dest,const char *src),作用是把從src位址開始且含有null結束符的字串複製到以dest開始的位址空間。注意:strcat是從dest的結尾處開始操作的,而strcpy是直接覆蓋dest指向的內容。3)c語言中,標頭檔案均為。

2.c中定義乙個字串指標

3.字串的傳遞

將陣列的首位址傳遞過去,每一位進行修改,即可完成對輸入陣列重新賦值。

在c語言中,陣列名可以賦值給指標表示位址,但是卻不能指標卻不能賦值給陣列名,由於陣列名是乙個常量,其不能被改變。

4. char**與char *a的區別

char *a:由於的優先順序要比*高,所以a先與結合,本質上其是乙個char*型別的乙個陣列,儲存的是位址。

#include int main()

;printf("%p %p %p %p\n",a[0],a[1],a[2],a[3]);

return 0;

}

返回值為4個字串的首位址,佔據4*4個位元組。

char**s:為二級指標, s儲存一級指標 char *的位址,關於二級指標就在這裡不詳細討論了 ,簡單的說一下二級指標的易錯點。 

char *a [ ] = ;

char **s = a;

為什麼能把 a賦給s,因為陣列名a代表陣列元素記憶體單元的首位址,即 a = &a[0] = 0012ff38;

而 0x12ff38即 a[0]中儲存的又是 00422fb8 ,這個位址, 00422fb8為字串"china"的首位址。

即 *s = 00422fb8 = "china";

這樣便可以通過s 操作 a 中的資料

char **a;

a=(char**)malloc(sizeof(char*)*3)

char* str1="aaa"

char* str2="bbb"

char* str3="ccc"

a[0]=str1;

a[1]=str2;

a[3]=str3;

參考部落格:

指標陣列與陣列指標的理解

指標陣列與陣列指標是十分繞口的,也不容易記憶,想要知道它是什麼?就看它後面是什麼詞!指標陣列 指標陣列後面的詞就是陣列,所以它就是陣列,而陣列裡面放的是指向這個型別的指標 陣列指標 陣列指標後面的詞是指標,則它就是個指標。在知道指標陣列和陣列指標字面的意思之後,我們就要解決遇到的表示式是指標陣列還是...

如何通俗理解指標陣列與陣列指標

如何通俗理解指標陣列與陣列指標 來自c語言小白的摸索經歷和總結 首先,在介紹兩個概念之前,我們先來看一條基礎語句int a 5,即在記憶體中存放元素 5 這個值,我們可以用下面這幅來簡單理解這個過程。在搞清楚這個問題後,我們再來看下一條語句int p a首先我們要清楚 p 是乙個指標型別的變數,而指...

指標與陣列,指標陣列 陣列指標

int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...