這樣:
#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
;//第二個字串開始的地址,應該是a[0][0]後移20個字元的地方。p是指向字元的指標
}
陣列名錶示列指標*(a+i)等價於a[i]列指標
擴充套件資料:
注意事項
對於二維陣列的輸入,一般是一行一行的輸入,當然也可以一個個來,但最好的還是一行一行的輸入。
所以一行一行的輸入:
for(int i= 0;i
scanf("%s",perNum[i]);
對於輸入,單個輸入用的是%c,而一行來輸入就是%s。
而有一個情況,此時輸入每行都是要存18個數字,所以想法就是設二維陣列的時候,列數就是18。
char perNum[100][18];
那這個時候輸入輸出程式碼:
int N;
scanf("%d",&N);
printf("%s\n",perNum[i]);
其中,第一行的2,是說明這個二維陣列的行數。
這個時候發現,輸入沒問題,但輸出的時候,按理來說,應該是2行18列。可是發現第一行的輸出把第二行的輸入也一起輸出了。
這個問題在於,輸出的時候,是根據\0,即換行符號判斷是否要換行輸出。但由於設定的列數才18,剛剛好只把輸入給存完,這樣子就沒有地方存換行符(\0)。
所以這裡的改進就是,把二維陣列的列數至少多一位,用於存放換行符。
所以程式碼改為:
char perNum[100][19];//比18多一位,存放換行符
這樣:
#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]);