首頁>技術>

超過一維的n維陣列可以轉換為n-1維陣列指標,只是喪失了第一維的長度資訊。宣告與n維陣列等價的n-1維陣列指標時,只需將第一維改寫為指標形式(*)即可。

一維陣列名可以轉換為一級指標,也是喪失了長度資訊。

char str[12];char *sp = str; // 注意符號“*”與“[]”一定意義上的等價性int arr2[3][4];int (*p2)[4] = arr2;int arr3[3][4][5];int (*p3)[4][5] = arr3;

對於一維陣列,如果其元素是一個指標呢?如:

char* str[12];

等價的指標形式應該怎樣寫?

如前面所述,str對應一級指標,自然,改寫後與二級指標等價了,當然,長度資訊也沒有了。

char **strs = str;

看如下例項:

#include <iostream>using namespace std;void print(char *str, int len){    for(int i=0;i<len;i++)        cout<<str[i];    cout<<endl;}void print2(char **str, int len){    for(int i=0;i<len;i++)        cout<<str[i]<<" ";    cout<<endl;} int main(){    char alp[12] = "abcdefghijk";    print(alp,12);    char* month[12]={"January","February","March",                      "April","May","June",                      "July","August","September",                      "October", "November","December"};    print2(month,12);    while(1);    return 0;}

我們知道,申請堆記憶體時,返回一個指標,可以是申請單個或多個內建資料型別(Built-in data type)(或結構體)。當申請的是多個內建資料型別(Built-in data type)(或結構體)時,也就是相當於建立了一個動態一維陣列。如果想申請一個n行m列的動態二維陣列呢?雖然可以將n行m列的動態二維陣列看成一維的n*m個元素的動態一維陣列,只是處理的邏輯要做一些改變,但有沒有辦法可以直接申請一個邏輯上的動態二維陣列呢?答案是先建立一個動態的一維指標陣列,再迴圈將每一個指標指向一個動態一維陣列。如前面所述,一維指標陣列邏輯上等價於一個二維指標。

    char **pp = new char*[12];    for(int i=0;i<12;i++)        pp[i] = new char[10];    // ……    for(int j=0;j<12;j++)        delete pp[j];    delete pp;

-End-

15
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 如何為應用設計REST API?