1. 程式人生 > >C++ (二)字串與指標

C++ (二)字串與指標

  • 字串與指標

  1. 一般情況下,除了對字串陣列定義時初始化外,不能直接將字串賦值給陣列。
    char s[30];
    s = "good news";//錯誤

     

  2. 可以採用strcpy()函式對字串陣列賦值
    char s[30]; 
    strcpy(s, "Good News!"); //賦值

     

  3. 指標陣列賦值

    char *p;
    p = "good news"//給字元型陣列賦值

    注意:不能通過指標修改p的值,因為該字串是常量,所有常量都被放在特殊的儲存區內無法修該。

  4. 可以通過指標賦值來實現字串交換
    int a[3];
    
    //指標每次加1,跳轉指標對應型別的步數
    
    a+1        地址+4//因為a指向a[0],為int變數
    *(&a)+1    效果同上
    &a+1       地址+16//因為&a指向整個陣列,為4*int變數
    
    a / *(&a) / &a //這三個指標都指向a[0]變數的首地址 
                   //但是&a的含義不同

     


  5. 二維陣列

  6. 一個數組名如果不出現在“&”後面 —— 則陣列名是 “指向陣列首元素的指標”

  7. 一個數組名如果出現在“&”後面 —— 則陣列名返回 “指向陣列的指標”

  8. int a[3][3];//二維陣列
    
    &a        表示指向整個二維陣列的指標
    a         表示指向第一個小陣列a[0]的指標
    a[0]      表示指向第一個小陣列的第一個元素a[0][0]的指標
    a[0][0]   表示a[0][0]地址裡的內容
    
    a        =    &a[0]
    a[0]     =    &a[0][0]
    a[0]     =    *a
    a[0][0]  =    **a
    int a[3][3] = {1,2,3,4,5,6,7,8,9};
    int (*p)[3];//定義一個指向“包含四個int型別元素的一維陣列”的指標
    int i,j;
    p = a;//a和p的基型別相同,都是指向“包含四個int型別元素的一維陣列”的指標
    
    //下面“=”表示相當於
    *(*(p+i)+j)    =    a[i][j]    =    p[i][j]
    p+i            =    &a[i]
    *(p+i)         =    a[i]
    *(p+i)+j       =    &a[i][j]

     


  • “&” 和“*”

  1. “&” —— 上升一級
  2. “*” —— 下降一級

指標指向的是儲存單元的內容,即變數,而不是變數的值(*p可以代表變數,對變數進行賦值)

int a[];
int *pointer;
pointer = &c;

pointer+i    =    a+i        =    &a[i]
*(pointer+i) =    *(a+i)     =    a[i]
pointer[i]   =    *(poiner+1)=    a[i]