| 一、数组1.1 为什么需要数组1、为了解决大量同类型数据的存储和使用问题2、为了模拟现实世界
 1.2 数组的分类数组有三种分类: 1、一维数组
2、二维数组
3、多维数组
 1.3 一维数组1.3.1 定义数组1、为n个变量连续分配存储空间。
2、所有的变量数据类型必须相同
3、所有变量所占的字节大小必须相等
 1.3.1.2 基本操作1.3.1.2.1 初始化int a[5] = {1, 2, 3, 4, 5}; 
 int a[5] = {1, 2, 3};
 int a[5];
 int a[5] = {0}; 
 只有在定义数组的同时才可以整体赋值,其他情况下整体赋值都是错误的
 int a[5] = {1, 2, 3, 4, 5};
 初始化只读数组有时需要把数组设置为只读,这时只能从数组中检索值,不能把新值写入数组。要创建这样的数组时,应该用const关键字声明和初始化数组。
 
const char ch[5]={1, 2, 3, 4, 5};
 1.3.1.2.2 查找数组的查找是按下标索引进行的,索引是从0开始。 #include <stdio.h>
int main(){
char ch[5]={11, 21, 22, 33, 44};
printf("%d", ch[1]); 
    return 0;
}
 当需要取出数组全部的值时,要使用循环的方式取出全部的值 #include <stdio.h>
int main(){
char ch[5]={11, 21, 22, 33, 44};
int i;
for(i=0; i<5; i++){
    printf("%d\n", ch[i]);
}
    return 0;
}
 字符数组的全部取出可以借助strlen()函数计算数组的长度。 #include <stdio.h>
#include <string.h>
int main(){
char arr[]={'a', 'b', 'c', 'd'};
int i;
for(i=0; i<strlen(arr)-1; i++){
    printf("%c\n", arr[i]);
}
    return 0;
}
 1.3.1.2.3 赋值声明数组后,可以借助数组下标(或索引)给元素赋值。对要赋值修改的元素的下标直接赋值即可。 #include <stdio.h>
#include <string.h>
int main(){
char arr[]={'a', 'b', 'c', 'd'};
int i;
arr[1] = 'e';
for(i=0; i<strlen(arr)-1; i++){
    printf("%c\n", arr[i]);
}
    return 0;
}
 1.3.1.2.4 数组复制在C语言种不能直接将1个数组赋值给另一个数组。需要遍历循环赋值给另一个数组。 int a[5] = {1, 2, 3,  4, 5};
int b[5];
 错误写法: b = a 	
 正确写法: for (i = 0; i < 5; ++i)
	b[i] = a[i]
 1.3.1.2.5 数组排序这里先放置一个简单的冒牌排序,后面会继续详解 # include <stdio.h>
void bubble_sort(int arr[], int len){
    int i, j;
    int temp=0;
    for(i=0;i<len;i++){
        for (j = 0; j<len-i-1; j++){
        if (arr[j] > arr[j+1]){
            temp=arr[j];
            arr[j]= arr[j+1];
            arr[j+1]=temp;
            }
        }
    }
}
int main(void){
    int i;
    int arr[]={5, 2, 7, 6, 9, 3, 4, 12, 10};
    int len = sizeof(arr)/sizeof(int);
    
    bubble_sort(arr, len);
    for (i = 0; i < len; i++)
    {
        printf("%d\n", arr[i]);
    }
	return 0;	
}
 1.4 二维数组二维数组表示的是行和列,如下实例则表示一个3行4列的二维数组。二维数组在内存中存储时是存储在连续的内存空间中。 int a[3][4]; 
 1.4.1 初始化二维数组同一维数组一样,同样有完全初始化和不完全初始化。不完全初始化时未初始化的值为零。 完全初始化方式一: int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
 完全初始化方式二: int a[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
 不完全初始化: 
int arr[3][4]={1, 2, 3, 4}
 1、在初始化时,行可以省略,但列不能省略。
2、初始化时建议使用方式二的方式初始化。
 1.4.2 基本操作1.4.2.1 输出数组的内容# include <stdio.h>
int main(void)
{
	int a[3][4] = {
		{1, 2, 3, 4},
		{5, 6, 7, 8},
		{9, 10, 11, 12}
	};
	int i, j;
	for (i = 0; i < 3; ++i)
	{
		for (j = 0; j < 4; ++j)
			printf("%-5d	",a[i][j]);	
		printf("\n");
	}
	return 0;	
}
 1.5 多维数组1、是否存在多维数组不存在,因为内存是线性唯一的,n维数组可以当作每个元素是n-1维数组的一维数组。
 比如:
 int a[3][4]
 可以当做每个元素都含有4个小元素的一维数组。 int a[3][4][5]
 该数组含有3个元素的一维数组,只不过每个元素都是4行5列的二维数组。 |