前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数组类学习

数组类学习

原创
作者头像
暮云
发布2022-10-31 15:21:33
3890
发布2022-10-31 15:21:33
举报
文章被收录于专栏:C/C++语言学习

数组类学习

一维数组的创建和初始化

数组的创建

代码语言:c++
复制
// 格式
type_t		arr_name 	 [const_n];
//数组元素类型    名称 		[常量表达式],用来指定数组大小

数组的初始化

代码语言:c++
复制
//例
#include<stdio.h>
#include<strlen.h>
int main()
{
    int arr[10]={1,2,3};//不完全初始化,剩下元素默认为初始值
    char arr2[5]={'a','b'};
    char arr3[5]="ab";//表达效果与arr2相同,不同的是在ab后面有一个'\0'
    char arr4[]="abcdef";//当未定义数组大小时,则自动根据数组内容进行初始化定义,arr4自定义大小为7,因为包括'/0'
    return 0;
}
代码语言:c++
复制
#include<stdio.h>
#include<strlen.h>
int main()
{
    char arr1[]="abc";
    char arr2[]={'a','b','c'};
    printf("%d\n",sizeof(arr1));//4
    printf("%d\n",sizeof(arr2));//3
    //sizeof计算arr1所占空间的大小
    printf("%d\n",strlen(arr1));//3
    //strlen 求字符串长度-'\0'之前的字符个数
    printf("%d\n",strlen(arr2));//随机值
    //arr2中没有'\0'所以是随机值
    return 0;
}

一维数组的使用

  • ,下标引用操作符,就是数组访问的操作符
代码语言:c++
复制
//例
#include<stdio,h>
int main()
{
    char arr[]="abcdef";//[a][b][c][d][e][f]
    printf("%c\n",arr[3]);//'d'
    return 0;
}
  • 一维数组在内存中的存储一维数组在内存中是连续存放的,且由低到高
代码语言:c++
复制
//例
#include<stdio.h>
int main()
{
    int arr[]={1,2,3,4,5,6,7,8,9,10};
    int sz = sizeof(arr)/sizeof(arr[0]);
    int i = 0;
    for(i=0;i<sz;i++)
    {
        printf("&arr[%d]= %p\n",i,&arr[i]);
    }
    return 0;
}
//结果如下:
&arr[0]= 00000003738FFB68
&arr[1]= 00000003738FFB6C
&arr[2]= 00000003738FFB70
&arr[3]= 00000003738FFB74
&arr[4]= 00000003738FFB78
&arr[5]= 00000003738FFB7C
&arr[6]= 00000003738FFB80
&arr[7]= 00000003738FFB84
&arr[8]= 00000003738FFB88
&arr[9]= 00000003738FFB8C

二维数组

创建

代码语言:c++
复制
type_t		arr_name 	[const_n]	[const_n]
//类型       名称         行          列
#include<stdio.h>
int main()
{
    int arr[3][4];
    char arr[5][6];
    return 0;
}
//注意二维数组括号内必须有数字,即行和列不能同时省略,且只有列未省略时,行才可省略

初始化

代码语言:c++
复制
#include<stdio.h>
int main()
{
    int arr[3][4] = {1,2,3,4,5};
    //第一行为1234,第二行为5000,第三行为0000
    int arr[3][4] = {{1,2,3},{4,5}};
    //第一行为1230,第二行为4500,第三行为0000
    return 0;
}

使用

代码语言:c++
复制
//锁定二维数组内容的位置
#include<stdio.h>
int main()
{
    int arr[3][4]={1,2,3,4,5,6,7,8,9,10};
    int i ;
    int j ;
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}
//结果如下:
1 2 3 4
5 6 7 8
9 10 0 0
  • 二维数组在内存中的存储二维数组在内存中也是是连续存放的,且由低到高
代码语言:c++
复制
#include<stdio.h>
int main()
{
    int arr[3][4]={1,2,3,4,5,6,7,8,9,10};
    int i ;
    int j ;
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            printf("&arr[%d][%d]= %p\n",i,j,&arr[i][j]);
        }
    }
    return 0;
}
//结果如下:
&arr[0][0]= 00000003022FF648
&arr[0][1]= 00000003022FF64C
&arr[0][2]= 00000003022FF650
&arr[0][3]= 00000003022FF654
&arr[1][0]= 00000003022FF658
&arr[1][1]= 00000003022FF65C
&arr[1][2]= 00000003022FF660
&arr[1][3]= 00000003022FF664
&arr[2][0]= 00000003022FF668
&arr[2][1]= 00000003022FF66C
&arr[2][2]= 00000003022FF670
&arr[2][3]= 00000003022FF674

数组作为函数参数

写代码时,会将数组作为参数传给函数。比如冒泡排序(将一个整型数组排序)

代码语言:c++
复制
#include<stdio.h>
void bubble_sort(int arr[],int sz)
{
    int i,j;
    //确定冒泡排序需要进行的次数
    for(i=0;i<sz;i++)
    {
        int flag=1;
        //每一次的冒泡排序
        for(j=0;j<sz-1-i;j++)
        {
            if(arr[j]>arr[j+1])
            {
                int t = arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=t;
                flag=0;
            }
        }
        if (flag==1)
            break;
    }
}
int main()
{
    int arr[]={10,9,8,7,6,5,4,3,2,1};
    int i;
    int sz=sizeof(arr)/sizeof(arr[0]);
    //对arr进行排序,排成升序
    //arr时数组,对数组进行传参,实际传递过去的时数组arr首元素地址&arr[0]
    bubble_sort(arr,sz);//冒泡排序函数
    for(i=0;i<sz;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

数组名是什么

代码语言:c++
复制
#include<stdio.h>
int main()
{
    int arr[]={1,2,3,4,5};
    printf("%p\n",arr);
    printf("%p\n",&arr);
    printf("%d\n",*arr);
    return 0;
}
//输出结果:
000000CE0814F958
000000CE0814F958
1
  • 结论

数组名是数组首元素地址(有俩例外)

1.sizeof(数组名) ——数组名表示整个数组。

2.&数组名,数组名代表整个数组。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数组类学习
    • 一维数组的创建和初始化
      • 数组的创建
      • 数组的初始化
      • 一维数组的使用
    • 二维数组
      • 创建
      • 初始化
      • 使用
    • 数组作为函数参数
      • 数组名是什么
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档