首页 > 其他分享 >C语言学习笔记(四)数组

C语言学习笔记(四)数组

时间:2023-07-22 14:12:13浏览次数:35  
标签:初始化 arr int 笔记 C语言 char 数组 sizeof

数组

一维数组的创建和初始化

//创建
类型 数组名 [元素个数];

int arr[10];
char arr2[5];

//初始化
int arr[10]={1,2,3}; //不完全初始化
char arr[5]={'a','b'};
char arr3[5]="ab";// 每一位为:a,b,末尾有\0

char arr6[]="abcdef"; //没有确定长度则必须进行初始化,根据初始化的内容自动确定长度

一维数组的使用

#include<stdio.h>
#include<string.h>
int main()
{
    int i,n,sz1,sz2;
    int arr1[]={1,2,3,4,5};
    sz1=sizeof(arr1)/sizeof(arr1[0]);
    char arr2[]={'a','b','c'};
    sz2=strlen(arr2);
    for(i=0;i<sz1;i++)
    {
        printf("%d ",arr1[i]);
    }
    printf("\n");
    for(n=0;n<sz2;n++)
    {
        printf("%c ",arr2[n]);
    }
    return 0;
}

一维数组在内存中的存储

数组在内存中是连续存放的

二维数组的创建和初始化

//创建
类型 数组名[行数][列数];
int arr[3][4];
char ch[3][5];
double arr[3][4];

//初始化
int arr[3][4]={1,2,3,4};
int arr[3][4]={{1,2},{4,5}};
int arr[][4]={{2,3},{4,5}};           //注意:列绝对不能省略!只能省略行!

易错点:

int a[3][3]; ————————>数字3,3代表这个数组有3行3列  是几就是几
a[2][1] —————————————>数字2,1代表第3行第2列  =下标+1

二维数组的使用

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

二维数组在内存中的存储

二维数组在内存中其实是连续存储的,即每一行和下一行首位相连

image-20230719142541127

数组作为函数的参数

冒泡排序实现数组以升序排列

相邻元素两两比较,例: 5 4 3 2 1

先排5

​ 5 4 3 2 1

—>4 5 3 2 1

—>4 3 5 2 1

—>4 3 2 5 1

—>4 3 2 1 5 //一趟冒泡排序,比较了4对


再排4

—>3 4 2 1 5

—>3 2 4 1 5

—>3 2 1 4 5


再排3

—>2 3 1 4 5

—>2 1 3 4 5


再排2

—>1 2 3 4 5

n个元素需要n-1趟冒泡排序

#include<stdio.h>

void bubble_sort(int arr[],int sz)//虽然arr[](注意此处的括号不可以省略!!!!)本质是一个指针,但是不能写成int*
{
    //确定冒泡排序的趟数
    int i = 0;
    for(i=0;i<sz-1;i++)
    {
        int j =0;
        //确定每一趟要对比的对数
        for(j=0;j<sz-1-i;j++)
        {
            if(arr[j]>arr[j+1])
            {	//不满足条件则交换两个数的位置
                int tmp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tmp;
            }
        }
    }
}

int main()
{
    int i=0;
    int arr[]={9,8,7,6,4,5,3,2,1,0};
    int sz = sizeof(arr)/sizeof(arr[0]);
    bubble_sort(arr,sz);
    for(i=0;i<sz;i++)
    printf("%d ",arr[i]);
    return 0;
}

数组名是什么意思?

arr 代表数组的首元素的地址,(所以不能随意乱用arr)但有两个例外:

sizeof(arr); 此处的arr代表的是整个数组

&arr arr代表整个数组,此处取的是整个数组的地址,&arr+1代表跳过整个数组以后的第一个地址

标签:初始化,arr,int,笔记,C语言,char,数组,sizeof
From: https://www.cnblogs.com/arongsec/p/17573295.html

相关文章

  • C语言编程必备技能!小写转大写
    在C语言中,要区分字母的大小写,可以利用ASCII码中大写字母和小写字母之间的转换关系,差值为32,通过这个差值可以将小写字母转换为大写字母。下面编写程序实现该功能:从键盘输入一个小写字母,按回车键后,程序将该小写字母转换为大写字母,并输出其ASCII值。 程序的算法思想如下:......
  • 09-二维数组
    二维数组介绍在Java中二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组二维数组的声明和创建数组定义格式:a) 数据类型[][]数组名;例如 int[][]array; //首选的方法b) 数据类型数组名[][];例如 intarray[][]; //不是首选的方法......
  • re: 从零开始的学PPT笔记
    深夜模式:账户\(\rightarrow\)office主题神奇操作:.ppt后缀改成.rar居然可以解压/jy默认设置:账户\(\rightarrow\)保存\(\rightarrow\)字体嵌入;账户\(\rightarrow\)高级设置\(\rightarrow\)不压缩图片默认字体:设计\(\rightarrow\)变体右下角\(\rightarrow\)字......
  • java 将json 转成对象数组
    将JSON转换为对象数组的步骤作为一名经验丰富的开发者,我将为你介绍如何将JSON数据转换为对象数组。这是一个非常常见的操作,而且在Java中也非常简单。下面是整个过程的步骤概览:步骤动作1.导入JSON库在你的项目中导入JSON库,以便能够处理JSON数据。2.创......
  • 算法学习笔记(26): 计算几何
    计算几何向量高一知识,略讲。向量外积若\(\vecx=(x_1,y_1),\vecy=(x_2,y_2)\),则有\(\vecx\times\vecy=x_1y_2-y_1x_2\)。或者表示为\(|\vecx||\vecy|\sin\theta\),其中\(\theta\)表示向量间的夹角。几何意义:两个向量构成的平行四边形的面积(可以......
  • JavaScript学习笔记
    之所以学习JS是想更清楚的了解这门语言,记得上学那会就感觉j真难学,工作了几年了一直从事后端,但偶尔也会用前端开发,这时候就会手忙脚乱, 好多东西都是默默糊糊,还有就是,我想知道这门语言真的很难学吗?抱着好奇的心态开始了一个月的学习历程,下面整理一下一个月的学习笔记.跟着......
  • 线性基学习笔记
    线性基的定义在一个高维空间中一组极大的线性无关的向量组成为一组线性基,更严谨的定义参考线性代数相关内容。但是在OI中我们常用的是异或线性基,它维护了给定若干个数能够通过异或计算出的所有的数,具体来说可以实现以下几个功能:求min/max异或和求k大异或和求异或和数......
  • Django学习笔记:第二章django的安装和创建应用
    1.安装Django终端运行pipinstalldjango查看django是否安装成功python-mdjango--version1.1安装虚拟环境在控制台运行pipinstallvirtualenv1.1.2创建虚拟环境在特定文件夹内打开终端运行virtualenv-pD:\program_condition\python\python.exeenv_djvir......
  • 概率期望学习笔记总结
    一.OSU!题目背景原《产品排序》参见P2577题目描述osu是一款群众喜闻乐见的休闲软件。我们可以把osu的规则简化与改编成以下的样子:一共有\(n\)次操作,每次操作只有成功与失败之分,成功对应\(1\),失败对应\(0\),\(n\)次操作对应为\(1\)个长度为\(n\)的01串。在......
  • 「学习笔记」AC 自动机
    AC自动机是 以Trie的结构为基础,结合 KMP的思想 建立的自动机,用于解决多模式匹配等任务。Trie的构建这里需要仔细解释一下Trie的结点的含义,Trie中的结点表示的是某个模式串的前缀。我们在后文也将其称作状态。一个结点表示一个状态,Trie的边就是状态的转移。形式化地......