1. 程式人生 > >陣列指標與指標陣列的理解

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

在進行閱讀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語言中,標頭檔案均為<string.h>。

2.C中定義一個字串指標

定義一個字串指標,將陣列的初始地址給字串指標,即可完成複製。

3.字串的傳遞

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

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

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

char *a[]:由於[]的優先順序要比*高,所以a先與[]結合,本質上其是一個char*型別的一個數組,儲存的是地址。

    #include <stdio.h>
   int main()
   {
    char *a [ ] = {"China","French","America","German"};
    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 [ ] = {"China","French","America","German"};
   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;