C语言——数组

一维数组

数组是一组相同类型元素的集合

创建及初始化

创建

类型   数组名  [ const]

//const   常量,指定数组大小

int arr[10];

初始化

创建数组的同时给数组赋予一些合理初始值

如果创建数组时,不指定固定大小,就必须初始化。

#include<stdio.h>
int arr0[10];    //全局变量:未初始化,默认初始化为0
int main()
{
    //初始化;
    int arr1[10]={0,1,2,3,4,5,6,7,8,9};

    //未初始化,赋给随机值;
    int arr2[10];

    //部分初始化,剩余未初始化元素赋0;
    int arr3[10]={0,1,2,3};

    //数组定义时,未给定数组大小,必须初始化
    //初始化的元素个数,为数组大小
    int arr4[]={0,1,2,3,4,5,6,7,8,9}           //ar数组元素个数为10

    //字符数组
    char ch[10]={'h','e,'l','l','o'};
    char str[]="hello"                                 //字符串
    
    return 0;
}

使用const声明数组

创建只读数组

数组元素只能检索,不能修改

const声明、初始化

const int arr[5]={0,1,2,3,4};

 

一维数组使用

[],下标引用操作符

示例 

#include <stdio.h>
int main()
{
     int arr[10] = {0};//数组的不完全初始化
     //计算数组的元素个数
     int sz = sizeof(arr)/sizeof(arr[0]);
     //对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:
     int i = 0;//做下标
     for(i=0; i<10; i++)
     {
         arr[i] = i;
     } 
     //输出数组的内容
     for(i=0; i<10; ++i)
     {
         printf("%d ", arr[i]);
     }
     return 0;
}

数组使用下标访问,下标从0开始

int arr[]134...
下标0123...

 

禁止越界访问

使用越界数组小标会导致程序改变其他变量的值

示例 

#include<stdio.h>
int main()
{
    int arr[10]=0;
    int i;
    for(i=0;i<12;i++)
    {
        arr[i]=0; 
        printf("hehe\n");   
    }
    return 0;
}

在debug环境中,输出为死循环

在ar[]越界后,将i值赋0,形成死循环。(编译器分配空间有关)

存储

数组在内存中连续存放

#include <stdio.h>
int main()
{
 int arr[10] = {0};
 int i = 0;
 for(i=0; i<sizeof(arr)/sizeof(arr[0]); ++i)
 {
     printf("&arr[%d] = %p\n", i, &arr[i]);
 }
 return 0;
}

二维数组

创建

类型   数组名  [ const1][const2]

int ar[3][4];
char arr[3][5];

初始化

初始化:col必须存在;

#include<stdio.h>
int main()
{
    //初始化
    int arr0[2][2]={{0,1},{2,3}};
    int arr1[2][2]={0,1,2,3};
    int arr2[2][2]={0,1};           //部分初始化
    //大小不明,必须初始化
    int arr3[][2]={{0,1},{2,3}};
}

初始化:const2必须存在;

用法

下标

示例 

#include <stdio.h>
int main()
{
 int arr[3][4] = {0};
 int i = 0;
 for(i=0; i<3; i++)
 {
     int j = 0;
     for(j=0; j<4; j++)
     {
     arr[i][j] = i*4+j;
     }
 }
 for(i=0; i<3; i++)
 {
     int j = 0;
     for(j=0; j<4; j++)
     {
     printf("%d ", arr[i][j]);
     }
 }
 return 0;
}

存储

为一串连续空间

#include <stdio.h>
int main()
{
 int arr[3][4];
 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;
}

数组作为函数参数

数组名为数组首元素的地址;

1.sizeof(数组名),计算整个数组的大小,数组名表示整个数组

2.&数组名,取出的是数组的地址。数组名表示整个数组

#include <stdio.h>
int main()
{
    int arr[10] = {1,2,3,4,5};
    printf("%p\n", arr);
    printf("%p\n", &arr[0]);
    printf("%d\n", *arr);
    //输出结果
    return 0;
}

最难不过坚持!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值