回覆列表
  • 1 # 我是阿嘛

    這樣:

    #include

    int main()

    {

    char a[3][20];

    char *p;

    int i;

    p=a[0];//a[0]為列指標,p指向0行0列元素,p=a[0]+j指向0行j列元素。

    for (i=0;i

    // for (i=0;i

    for (i=0;i

    ;//第二個字串開始的地址,應該是a[0][0]後移20個字元的地方。p是指向字元的指標

    }

    陣列名錶示列指標*(a+i)等價於a[i]列指標

    #include

    int main()

    {

    char a[3][20];

    int i;

    for (i=0;i

    // for (i=0;i

    for (i=0;i

    }

    擴充套件資料:

    注意事項

    對於二維陣列的輸入,一般是一行一行的輸入,當然也可以一個個來,但最好的還是一行一行的輸入。

    所以一行一行的輸入:

    for(int i= 0;i

    scanf("%s",perNum[i]);

    對於輸入,單個輸入用的是%c,而一行來輸入就是%s。

    而有一個情況,此時輸入每行都是要存18個數字,所以想法就是設二維陣列的時候,列數就是18。

    char perNum[100][18];

    那這個時候輸入輸出程式碼:

    char perNum[100][18];

    int N;

    scanf("%d",&N);

    for(int i= 0;i

    scanf("%s",perNum[i]);

    for(int i= 0;i

    printf("%s\n",perNum[i]);

    其中,第一行的2,是說明這個二維陣列的行數。

    這個時候發現,輸入沒問題,但輸出的時候,按理來說,應該是2行18列。可是發現第一行的輸出把第二行的輸入也一起輸出了。

    這個問題在於,輸出的時候,是根據\0,即換行符號判斷是否要換行輸出。但由於設定的列數才18,剛剛好只把輸入給存完,這樣子就沒有地方存換行符(\0)。

    所以這裡的改進就是,把二維陣列的列數至少多一位,用於存放換行符。

    所以程式碼改為:

    char perNum[100][19];//比18多一位,存放換行符

    int N;

    scanf("%d",&N);

    for(int i= 0;i

    scanf("%s",perNum[i]);

    for(int i= 0;i

    printf("%s\n",perNum[i]);

  • 中秋節和大豐收的關聯?
  • 喝蜂蜜水可以吃香蕉嗎?