首页 > 其他分享 >数组

数组

时间:2023-01-23 16:32:29浏览次数:30  
标签:10 arr int 数组名 数组 printf

一.一维数组的创建和初始化

1.数组的创建

数组是一组相同元素的集合。数组的创建方式:

type_t arr_name [const_n];
type_t 是指数组的元素类型
arr_name 数组名
const_n 是一个常量表达式,用来指定数组的大小

数组创建的实例:

int arr[10];
char arr[10];

但这个不正确:

int count=10;
int arr[count];

注:数组创建,[ ]中要给一个常量才可以,不能使用变量

2.数组的初始化

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)

不完全初始化:

剩下的元素默认初始化为0

int arr1[10]={1,2,3};
char arr2[5]={'a','b'};
char arr3[5]="ab";//双引号放字符串--a b \0 0 0

完全初始化:

char arr[5]={1,2,3,4,5}

如果[  ]没有放常量 则必须对该数组进行初始化

char arr[]="abcdef";

3.一维数组的使用

对于数组的使用我们之前介绍了:[ ],下标引用操作符。它其实就是数组访问的操作符。

对数组的打印方法:

#include<stdio.h>
#include<string.h>
int main()
{
char arr[]="abcdef";//[a][b][c][d][e][f][\0]
//printf("%s\n",arr);字符串
int i=0;
for(i=0;i<strlen(arr);i++)
{
printf("%c ",arr[i]);
}
return 0;
}

总结:

1.数组是使用下标来访问,下标是从0开始

2.数组的大小可以通过计算得到

int arr[10]
int sz=sizeof(arr)/sizeof(arr[0])

4.一维数组在内存中的储存

#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;
}

%p是打印取地址的  ;&arr[i]的&是取地址符号

数组_数组名

int

int

int

int

int

int

int

int

int

int

int

int

发现:相邻的两个整型类型中间都相差4个字节

结论:数组在内存中是连续存放的

二.二维数组的创建和初始化

1.二维数组的创建

 arr[ 行 ][ 列 ]

int arr[3][4]
char arr[3][4]
double arr[2][4]

2.二维数组的初始化

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

注:还可以把一行一行的整体看出一个一维数组 这个整体的一维数组可以用{ }进行部分的打印

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

注:可以省略行 但不能省略列

int arr[][4]={{2,3},{4,5}};//这里就是两行 因为{}{}里面的{2,3}{4,5}分别代表一行

3.二维数组的使用

二维数组也是通过下标的方式使用

#include<stdio.h>
int main()
{
int arr[3][4]={{1,2,3},{4,5}};
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");
}
return 0;
}

数组_函数_02

类似乘法口诀表的打印方法

4.二维数组在内存中的储存

#include<stdio.h>
int main()
{
int arr[3][4]={{1,2,3},{4,5}};
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]);
}
printf("\n");
}
return 0;
}

数组_冒泡排序_03

int

int

int

int

int

int

int

int

int

int

int

int

数组作为函数参数

往往我们在写代码的时候,会将数作为参数传个函数,比如:我要实现一个冒泡排序(这里要讲算法思想)函数将一个整型数组排序。那我们将会这样使用函数:

冒泡排序

当数组传参的时候,实际上只是把数组的首元素的地址传过去了

所以即使在函数传参部分写成数组的形式:int arr[ ],表示的依然是一个指针:int * arr

(一套):

10 9 8 7 6 5 4 3 2 1

9 10 8 7 6 5 4 3 2 1

9 8 10 7 6 5 4 3 2 1

9 8 7 10 6 5 4 3 2 1

......

9 8 7 6 5 4 3 2 1 10

一套冒泡排序可以找到一个最大值

举例:

#include<stdio.h>
void bubble_sort(int arr[],int sz)//排完序就可以了 所以不需要返回值
{
//确定冒泡排序的趟数
//确定多少个元素(n个元素需要n-1趟)
int i=0;
for(i=0;i<sz-1;i++)
{
//每一趟冒泡排序
int flag=1;
//假设这趟要排序的数组已经有序了

int j;
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;
flag=0;//本趟排序的数据其实是不完全排序
}
}
if(flag==1)
{
break;
}
}
}
int main()
{
int arr[]={9,8,7,6,5,4,3,2,1,0};
int i=0;
int sz=sizeof(arr)/sizeof(arr[0]);
//对arr进行排序 拍成升序
bubble_sort(arr,sz);
///arr是数组 数组传参传的是第一个元素的地址
//冒泡排序函数
for(i=0;i<sz;i++)
{
printf("%d ",arr[i]);
}
return 0;
}

数组名是什么

#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;
}

数组_数组_04

结论:数组名是数组首个元素的地址(有两个例外)

例外:

1.sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组,单位是字节

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

标签:10,arr,int,数组名,数组,printf
From: https://blog.51cto.com/u_15899086/6021928

相关文章

  • JS数组对象 | 中文按照首字母排序sort()、localeCompare()
    一、数组//根据中文の首字母排序letarr=['上海','北京','广州','深圳']arr.sort((a,b)=>a.localeCompare(b))console.log(arr)//数组sort()方法是会改变原数组的,可......
  • vue关于通过下标更改数组的理解
    案例1:通过下标更改数组失败<template><div><el-button@click="handlerMe2">改变arr</el-button><div>{{arr}}--arr</div></div></template><script>ex......
  • 800. 数组元素的目标和
    文章目录​​Question​​​​Ideas​​​​Code​​Question给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。请你求出满足A[i]+B[j]=x的数对......
  • 基础的树状数组操作
    ​目录动态求连续区间和所以用到另一种方法——树状数组另一种方法——线段树完整线段树代码 数列区间最大值分析: 具体实现:数星星小朋友排队 分析:代码实现......
  • JavaScript学习笔记—数组去重实例
    编写代码去除数组中重复的元素constarr=[1,2,1,3,2,2,4,5,5,6,7];//分别获取数组中的元素for(leti=0;i<arr.length;i++){//获取当前值后边的所有值f......
  • JavaScript学习笔记—数组的方法
    1.非破坏性方法(1)Array.isArray():用来检查一个对象是否是数组console.log(Array.isArray([1,2,3,4]));//trueconsole.log(Array.isArray({name:"孙悟空"}));//fals......
  • C语言数组和指针传参
    一、数组传参1.一维数组传参一维数组传参时,形参有两种表示方法,1.1.一维数组来接收实参的一维数组首地址(形参的数组在编译器眼里就是一个指针,[]里的数字可写可不写),1.2.一级......
  • Java有关数组对象越界的问题?
    提问: 我写了一个房屋出租系统,里面有房主的姓名,电话,地址,房号id和出租状态请问一下,再新增房屋的时候,都先判断一下房屋够不够,如果不够,那就新增一个数组来进行扩容,但是扩容新......
  • JavaScript学习笔记—数组
    1.描述数组也是一种复合数据类型,在数组中可以存储多个不同类型的数据数组中存储的是有序的数据,数组中的每个数据都有一个唯一的索引,可以通过索引来操作获取数据数组中......
  • 代码随想录day23 669. 修剪二叉搜索树 108. 将有序数组转换为二叉搜索树 538. 把二叉
     classSolution{public:TreeNode*trimBST(TreeNode*root,intlow,inthigh){if(root==nullptr)returnnullptr;if(root->val<l......