五、C_base——数组

【1】数组的概念

    1、数组:由多个类型相同数据的集合
    2、元素访问:a[0] ~ a[n-1]

【2】定义

     1---   int a[10] = {0,1,2,3};

     2---   #define N 10;
            int a[N] = {0,1,2,3};       

     3---   int a[] = {0,1,2,3};    //空间开辟由初始化的元素个数决定

     4---   int a[];        //错误方式!!!!

【3】初始化(局部变量)

    1---    部分初始化:没有初始化的位置为0
    2---    不初始化:元素为随机值
    3---    全局变量默认初始化为0

【4】数组的性质

    1、元素类型相同
    2、开辟空间是连续的
    3、数组名是首地址
    4、数组越界访问不报错,使用时注意。

【5】数组名

    1、空间大小  sizeof(a);      
    2、元素个数  sizeof(a)/sizeof(int);

【6】冒泡排序过程:

    (1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上
    (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置
    (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束

【7】二维数组

int a[N][M] = {0,1,2,3,4,5,6,7};

    a       以整个二维数组为一个单位的首地址           
    a[0]    第一行的首地址                                                
    a[1]    第二行的首地址                                
    a[2]    第三行的首地址    

【8】char数组

    char a[10] = "ABCDE";

源码及注释

1、 1_array.c

#include <stdio.h>

/*
* 概念:若干个数据类型相同的元素集合
* 定义:类型 名字[元素个数];
* 访问:a[0]  ~ a[n-1]

* 初始化  :
*     1、不初始化为随机值  
*     2、部分初始化,没有初始化的部分为0   
*     3、初始化禁止越界

* 元素个数:常量,不写(空间由初始化的元素个数决定),变量(不能初始化)
*/
#define N 10                        //宏

int main(int argc, const char *argv[])
{
    int a[N] = {0,1,2,3,4};
    int i;

    //遍历访问:不重复的访问每一个元素
    for(i=0; i<10; i++)
    {
        printf("a[%d] = %d\n",i, a[i]);
    }

    printf("size = %d\n",sizeof(a));

    return 0;
}

2、 2_array.c

#include <stdio.h>
#define N 8

//1、元素类型相同
//2、存储空间连续
//3、数组名代表第一个元素的地址(首地址)

int main(int argc, const char *argv[])
{
    int a[N] = {0,1,2,3,4,5};
    int i;

    for(i=0; i<N; i++)
    {
        printf("%p\n",&a[i]);
    }

    printf("a    = %p\n",a);
    printf("size = %d\n",sizeof(a));
    printf("N    = %d\n",sizeof(a)/sizeof(int));

    return 0;
}

3、 3_array_sort.c

#include <stdio.h>

#define N 5

int main(int argc, const char *argv[])
{
    int a[N] = {2,3,1,0,7};         //1 2 3
    int i,j;                        //i:轮数  j:前一个数的下标 

    for(i=0; i<N-1; i++)
    {
        for(j=0; j<N-i-1; j++)
        {
            if(a[j] > a[j+1])
            {
                a[j] ^= a[j+1];
                a[j+1] ^= a[j];
                a[j] ^= a[j+1];
            }
        }
    }

    for(i=0; i<N; i++)
    {
        printf("a[%d] = %d\n",i ,a[i]);
    }
    return 0;
}

4、4_two_array.c

#include <stdio.h>
/*
 * 二维数组
 * 定义:类型 名字[][];
 * a[M][N]:  a[0][0] ~  a[M-1][N-1]

 * 元素类型相同
 * 存储空间连续
 * 数组名是首地址
 */
int main(int argc, const char *argv[])
{
    int a[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};
    int i,j;

    for(i=0; i<3; i++)
    {
        for(j=0; j<4; j++)
        {
            printf("%p  ",&a[i][j]);
        }
        putchar(10);
    }

    printf("a    = %p\n",a);    //a:以二维数组作为一个整体的首地址
    printf("a[0] = %p\n",a[0]); //a[0] a[1] a[2]:每一行的首地址
    printf("a[1] = %p\n",a[1]);
    printf("a[2] = %p\n",a[2]);
    printf("size = %d\n",sizeof(a));

    return 0;
}

5、 5_array_reverse.c

#include <stdio.h>

//数据翻转
int main(int argc, const char *argv[])
{       
    int a[] = {0,1,2,3,4,5,6,7,8};
    int n = sizeof(a) / sizeof(int);
    int i,j;            //i:前   j:后


    for(i=0,j=n-1; i<j ;i++, j--)
    {
        a[i] ^= a[j];
        a[j] ^= a[i];
        a[i] ^= a[j];
    }

    for(i=0; i<n; i++)
    {
        printf("a[%d] = %d\n",i , a[i]);
    }

    return 0;
}

6、 6_array_Max.c

#include <stdio.h>

//找二维数组里的最大值,及其下标

int main(int argc, const char *argv[])
{
    int a[3][4] = {{0,1,-1,3},{4,15,26,7},{8,9,10,11}};
    int row = 0,line = 0;
    int i,j;

    for(i=0; i<3; i++)
    {
        for(j=0; j<4; j++)
        {
            //a[0][2]    a[0][1]
            if(a[i][j] > a[row][line])
            {
                row = i;
                line = j;
            }
        }
    }

    printf("row = %d  line = %d  MAX = %d\n",row,line, a[row][line]);

    return 0;
}

7、 char.c

#include <stdio.h>

int main(int argc, const char *argv[])
{
//  char a[10] = {'A','B','C','D','E','\0'};
//以一个字符串直接赋值,只允许出现在初始化的时候
    char a[] = "hello world";   
    int i;

    printf("size = %d\n",sizeof(a));
    printf("a = %s\n", &a[0]);  //%s:从给定的地址开始,到‘\0’结束
    printf("a = %s\n", a);
    puts(&a[0]);
    puts(a);

/*  
    for(i=0; i<10; i++)
    {
        printf("a[%d] = %c\n",i , a[i]);
    }
*/

    return 0;
}

8、 my_strcoy.c

#include <stdio.h>

int main(int argc, const char *argv[])
{
    char a[] = "hello world";
    char b[] = "beijing";
    int i;

    // hello world
    // beijing

    for(i=0;  b[i] != '\0' ; i++)
    {
        a[i] = b[i];        //当跳出for循环,b[i] == '\0'
    }
    a[i] = '\0';
    printf("a = %s\n",a);

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值