C语言学习

学习内容

一维数组,二维数组 创建 ,初始化,数组名

代码笔记

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//一维数组
//数组的创建
//数组:相同元素类型的集合
//数组的创建方式
//typt_t     arr_name   [const_n];
//元素类型              常量表达式,用来指定数组大小

//int main()
//{
//    //创建数组
//    int arr[10];
//    char ch[5];
//    double data1[20];
//    double data2[20];
//
//    int n = 10;
//    int arr2[n];
//    //在c99标准之前,数组的大小必须是常量
//    //之后可以是变量,为了支持变长数组
//
//}

//数组的初始化:创建数组的同时给它赋合理的值
//int main()
//{
//    int arr[10] = { 1,2,3 };//不完全初始化,剩余的元素默认初始化为0
//    int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };//完全初始化
//
//    char ch1[10] = "abc";//a b c \0 0 0 0 0 0 0
//    char ch2[10] = { 'a','b','c' };//a b c 0 0 0 0 0 0 0
//}

//一维数组的基本使用 :[]
//int main()
//{
//    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//[]下标引用操作符        
//    //下标        0 1 2 3 4 5 6 7 8 9 
//    int i = 0;
//    int sz = sizeof(arr) / sizeof(arr[0]);//数组的大小可以被计算
//    /*for (i = 0; i < sz; i++)
//    {
//        printf("%d\n", arr[i]);
//    }*/
//
//    /*for (i = sz - 1; i >=0; i--)
//    {
//        printf("%d\n", arr[i]);
//    }*/
//
//    //打印数组的每个元素的地址
//    for (i = 0; i < sz; i++)
//    {
//        printf("&arr[%d]=%p\n",i, &arr[i]);//整形元素占4个字节 每个地址之间相差4
//    }
//    //数组在内存中是连续存放的
//    return 0;
//}

//二维数组
//二维数组的创建及初始化
//int main()
//{
//    // 1 2 3 4
//    // 2 3 4 5 
//    // 3 4 5 6 
//    int arr1 [3][4] = {1,2,3,4,2,3,4,5,3,4,5,6};//三行 四列 按顺序存储 剩余元素默认初始化为零
//    int arr2 [3][4] = { {1,2},{2,3},{3,4} };//数据不足 提前分组
//    int arr3 [ ][4] = { 1,2,3,4,2,3, };//可以省略行但是不能省略列
//    /*char arr3 [5][10];*/
//    return 0;
//}

//二维数组的使用
// 行,列都从0开始
//1 2 3 4 
//2 3 4 5 
//3 4 5 6
//int main()
//{
//    int arr[3][4] = { 1,2,3,4,2,3,4,5,3,4,5,6 };
//    int i = 0;
//    //全部打印
//    /*for (i = 0; i < 3; i++)
//    {
//        int j = 0;
//        for (j = 0; j < 4; j++)
//        {
//            printf("%d ", arr[i][j]);
//        }
//        printf("\n");
//    }*/
//
//    //打印某一元素
//    /*printf("%d\n", arr[2][2]);*/
//    
//    //打印输入的数组
//    /*for (i = 0; i < 3; i++)
//    {
//        int j = 0;
//        for (j = 0; j < 4; j++)
//        {
//            scanf("%d", &arr[i][j]);
//        }
//    }
//    for (i = 0; i < 3; i++)
//    {
//        int j = 0;
//        for (j = 0; j < 4; j++)
//        {
//            printf("%d ", arr[i][j]);
//        }
//        printf("\n");
//    }*/
//
//    
//    
//    printf("%d", sz);
//    return 0;
//}

//int main()
//{
//    int arr[3][4] = { 1,2,3,4,2,3,4,5,3,4,5,6 };
//    int i = 0;
//    
//    for (i = 0; i < 3; i++)
//    {
//        int j = 0;
//        for (j = 0; j < 4; j++)
//        {
//            printf("&arr[%d][%d]=%p\n",i,j, &arr[i][j]);//二维数组存储也时在内存中连续存放的
//        }
//    }
//    return 0;
//}

//数组越界
//数组的下标是有范围限制的 数组的下标是从0开始的,如果数组有n个元素,最好一个元素的下标就是n-1。
//所以下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问
//C语言本身时不做数组下标的越界检查,编译器也不一定报错,并不意味这程序就是正确的,需要程序员自己检查。


//数组作为函数参数
//将数组排成升序
//0 1 2 3 4 5 6 7 8 9 
//采用冒泡排序算法,对数组进行排序
//形参是指针的形式
//void bubble_sort(int* arr,int sz)
//形参是数组的形式
//void bubble_sort(int arr[],int sz)
//{
//    int k = 0;
//    //趟数
//    for (k = 0; k < sz-1; k++)
//    {
//        int i = 0;
//        //一趟冒泡
//        for (i = 0; i < sz -(k+1); i++)
//        {
//            
//            if (arr[i] > arr[i + 1])
//            {
//                //交换
//                int j = arr[i];
//                arr[i ] = arr[i+1];
//                arr[i+1] = j;
//            }
//        }
//    }
//}
//
//
//int main()
//{
//    int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    bubble_sort(arr,sz);
//
//    int i = 0;
//    for (i = 0; i < sz; i++) 
//    {
//        printf("%d ", arr[i]);
//    }
//    
//    return 0;
//}

//数组名
//数组名确实能表示首元素的地址,但有两个例外
//1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节
//2.&数组名,这里的数组名表示整个数组,取出整个数组的地址
//int main()
//{
//    int arr[10] = { 0 };
//    printf("%p\n", arr);//arr是首元素的地址
//    printf("%p\n", arr+1);
//    printf("\n");
//    printf("%p\n",&arr[0]);//首元素的地址
//    printf("%p\n", &arr[0]+1);
//    printf("\n");
//    printf("%p\n", &arr);//数组的地址  移动了一整个数组的空间
//    printf("%p\n", &arr+1);
//    printf("\n");
//    int n = sizeof(arr);
//    printf("%d", n);
//}


//二维数组的数组名理解
//int main()
//{
//    int arr[3][4];
//    //int sz = sizeof(arr);
//    //printf("%d\n", sz);
//    arr;//二维数组的数组名也表示数组首元素的地址
//
//    //计算行数
//    //int sz = sizeof(arr) / sizeof(arr[0]);
//    //计算列数
//    //int sz = sizeof(arr[0])/sizeof(arr[0][0])
//    return 0;
//}

感悟思想

整理清楚 加油!

  • 20
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值