——黑馬程序員——C語言中二維數組、字符數組和字符串

-----------android培訓java培訓、java學習型技術博客、期待與您交流!-----------
C語言中二維數組、字符數組和字符串

一、二維數組

一般形式:
類型說明符  數組名   常量表達式 ]  [常量表達式 ];
例如:
int a[3][4];
二維數組常稱爲矩陣。二維數組可以看着是一種特殊的一維數組。

二、二維數組初始化

1、分行給二維數組初始化
int a[3][4] = { { 1,2,3,4 }, { 5,6,7,8 },  { 9,10,11,12 } };
2、可以將所有的數據寫在一個{ }內
int a[3][4] = { 1,2,3,4,5,6,7,8, 9,10,11,12 };
3、可以部分初始化
int a[3][4] = { { 1 },  { 5 },  { 9 } };
他的作用是隻對各行第1列(即序號爲0的列)的元素賦初值,其餘元素自動賦值爲0,賦值後數組各元素爲:
1 0 0 0
5 0 0 0
9 0 0 0
4、也可以給某一元素賦值
int a[3][4] = { { 1 },  { 5, 6 },  { 0, 9 ,11 } };
初始化後的數組元素爲;
1 0 0 0
5 6 0 0
0 9 11 0
5、數組長度可以是常量表達式
int a[3][3+1] = { { 1 },  { 5, 6 },  { 0, 9 ,11 } };
6、二維數組可以省略第一維
int a[ ][4] = { { 1,2,3,4 },  { 5, 6,7,8 },  { 9, 10 ,11,12 } };
7、二維數組也可以先定義後初始化
int a[3][4] ;
 a[3][4]  = { { 1 },  { 5, 6 },  { 0, 9 ,11 } };

三、二維數組的遍歷

利用一個雙循環對二維數組進行遍歷,外層循環控制列,內層循環控制行
#include <stdio.h>
#include <stdlib.h>
int main()
{	//定義變量
	int m = 3;
    int n = 4;
    //定義二維數組
	int a[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
    //遍歷數組
    for(m = 0; m < 3; m++)
    {
		for(n = 0; n < 4; n++)
        {
			printf("a[%d][%d] = %d	",m,n,a[m][n]);
        }
    printf("\n");
    }
	system("pause");
	return 0;
}
測試結果:

四、二維數組的內存存儲細節

存儲方式
1、計算機會給二維數組分配一塊連續的存儲空間
2、數組名代表的是數組的首地址,從首地址位置其,依次存入第一行、第二行.......
3、每一行的存儲防暑,從行的首地址開始依次存儲行的第1個元素、第2個元素.....
4、每個元素佔用相同的字節數(取決於數組的類型)
5、數組元素之間的地址是連續的
測試代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{	//定義變量
	int m = 3;
    int n = 4;
    //定義二維數組
	int a[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
    printf("二維數組元素\n");
    //遍歷數組
    for(m = 0; m < 3; m++)
    {
		for(n = 0; n < 4; n++)
        {
			printf("a[%d][%d] = %d  ",m,n,a[m][n]);
        }
    printf("\n");
    }
    
    printf("\n\n");
    //取出二維數組元素的地址
    printf("二維數組首地址爲:&a = %p\n\n",a);
    
    //二維數組的地址
    
    printf("二維數組的地址\n");
    int i,j;
	for(i = 0; i < 3; i++)
    {
		for(j = 0; j < 4; j++)
        {
			//二維數組的元素的地址
			printf("&a[%d][%d] = %p	 ",i,j,&a[i][j]);
        }
    printf("\n");
    }    
    
	system("pause");
	return 0;
}
測試結果:

 二維數組佔用的總字節數:每行佔用的字節數之和。
測試代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//定義一個數組
	int a[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
    //計算數組長度
    printf("二維數組a[3][4]的長度爲:%d\n",sizeof(a));
	system("pause");
	return 0;
}
測試結果:

五、字符數組

字符數組的初始化和其他的一維數組的初始化基本相同
例如:char ch[ 3 ] = { 'a' }
它表示給字符數組的第一元素初始化爲字符a,其他元素的值系統自動初始化爲\0,對應的ASCII碼值爲0.
1、作用:1、保存字符
        2、保存字符串,以\0結束。 C語言中沒有字符串類型,只能用字符數組存儲字符串
2、字符串:位於雙引號當中的字符序列
3、字符數組存儲字符串的初始化方式
(1)char [5] = "abcd";    此處長度必須大於字符串的長度,因爲末尾需要存儲一個\0作爲結束符,因此常常省略字符數組的長度
(2)char [5] = {"abcd"};  此處長度必須大於字符串的長度,因爲末尾需要存儲一個\0作爲結束符,因此常常省略字符數組的長度
測試代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//定義字符數組
	char s[6] = {'a','b','c','d','e','f'};
    int i;
    //遍歷字符數組
    for(i = 0; i < sizeof(s); i++)
    {
		printf("s[%d] = %c\n",i,s[i]);
    }
    printf("\n");
	//定義字符數組並初始化爲字符串
	char str[7] = "abcdef";
    int j;
    //遍歷字符串
    for(j = 0; j < sizeof(str); j++)
    {
    //計算數組長度
    printf("str[%d] = %c\n",j,str[j]);
    }
    printf("\n");
    //以字符串格式輸出
    printf("以字符串格式輸出爲:%s\n",str);
	system("pause");
	return 0;
}
測試結果:

六、字符串的輸入和輸出

(1)以%c輸出時每次打印一個字符,需要循環才能實現字符串的全部輸出
(2)以%s格式輸出時可以從給定的地址開始一次打印一個字符串直到遇到\0結束
(3)以%s輸出一個字符數組,初始化時就必須以\0結束,如果不寫\0,則會打印出所有的字符直到遇到\0才結束輸出
測試代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//定義字符數組
	char s[] = "HeiMaXunLianYin";
    //輸出字符串
    printf(" %s\n",s);
    printf("\n");
    //從給定地址輸出
	printf(" %s\n",&s[5]);
    printf("\n");    
    
    //定義一個字符串
    char s1[] = "HeiMa\0XunLianYin";
    // 直到遇到\0結束測試
    printf(" %s\n",s1);
	system("pause");
	return 0;
}
測試結果;

測試代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//定義字符數組
	char s[] = {'a','b','c','d'};
    //輸出字符串
    printf(" %s\n",s);
    printf("\n");
    //從給定地址輸出
	printf(" %s\n",&s[2]);
    printf("\n");    
    
    //定義一個字符串
	char s1[] = {'a','b','c','d','\0'};
    // 直到遇到\0結束測試
    printf(" %s\n",s1);
    //從給定地址輸出
	printf(" %s\n",&s1[2]);
	system("pause");
	return 0;
}
測試結果

(4)以%s輸入時注意空格,如果輸入時含有空格,遇到空格就會結束
測試代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//定義字符數組
	char s[]={'0'};
    //輸出字符串
    printf("請輸入一個字符串\n",s);
    //接受鍵盤輸入的值
    scanf("%s",s);
    //打印輸入的字符串
	printf(" 您輸入的字符串爲:%s\n",s);    
   
	system("pause");
	return 0;
}
測試結果1:

測試結果2:












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章