c语言数组

1 什么是数组

在c语言中,数组是一种构造类型,它是由基本类型数据按照一定规则组成的新类型,数组中每个值的类型必须与数组的类型相同,使用数组名和下标来唯一确定数组中的元素

2 数组的使用

我们可以想一下,如果要统计5个学生的总分是很容易的,但是如果要统计100个学生的总分将会是很麻烦的,程序很繁琐,所以我们需要用数组来解决

#include<stdio.h>	
 int main(){	
 	int i;
 	float sum=0,score[5]; 
 	printf("输入十个学生的成绩: ");
 	for(i=0;i<5;i++)//i用来做下标
 	{
 		scanf("%f",&score[i]);//数组是用下标来访问的,下标是从0开始,下标不能越界
 		sum+=score[i];
	 }
	 printf("%f",sum);
 	return 0;
 } 

3 数组的定义和初始化

数组的定义
  一维数组的定义方式:
  类型说明符 数组名[常量表达式]
  例如:
   int arr[10];//数组名为a,有十个int型元素
   double score[50*2];//数组名为score,有100个double型元素
   
  在定义数组时需要注意的问题:
  <1>常量表达式,表示的是数组元素的个数(即数组的长度),在定义时必须指定该值。
  <2>引用元素时下标从零开始
  <3>注意下标越界问题
  <4>常量表达式中可以包含常量或常量表达式,不包含变量。
数组的初始化
int arr1[5]={1,2,3,4,5};//为全部元素赋值
int arr2[5]={1,2,3};//为部分元素赋值,后2个元素为0
int arr3[]={1,2,3};//定义并初始化,数组长度可省略
int arr4[];//不对的,单独定义数组长度不能省

4 数组在内存中的存储

#include<stdio.h>
int main() {
	int arr[5] = { 0 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);//计算数组的元素个数
	for (i = 0; i < sz; i++)
	{
		printf("&arr[%d]=%p\n", i,&arr[i]);
	}
	return 0;
}

代码结果如下:
在这里插入图片描述
仔细观察可知:
1 数组的大小可以通过计算得到
2 数组在内存中是连续存放的

5 二维数组的定义和初始化

二维数组的定义
类型说明符 数组名[常量表达式1][常量表达式2]
例如:
int[5][10]; float score[5][10];

常量表达式的规则和一维数组相同。常量表达式也可以预先定义一个名字
例如:
	#define M 3
	#define N 5
	int a[M][N];
二维数组的初始化
 int arr[3][4]={1,2,3,4,5};
 int arr[][4]={{2,3},{},{4,5,6}};
 二维数组可以省略行数,但是不可以省略列数

6 二维数组在内存中的存储

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

代码结果如下:
在这里插入图片描述
二维数组在内存中也是连续存储的,所以跨行也是连续的。

7 冒泡排序

#include<stdio.h>   
    void BubbleSort(int arr[],int sz)//形参arr本质是指针 
    {
    	int i=0,j=0;
    	for(i=0;i<sz-1;i++)
    	{
    		int flag=1;
    		for(j=0;j<sz-1-i;j++)//第一趟5对比较,第二趟4对比较 
    		{
    			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 i=0;
	    int arr[6]={9,4,7,5,6,3};
	    int sz=sizeof(arr)/sizeof(arr[0]);//求出数组大小 
	    BubbleSort(arr,sz);
	    	for(i=0;i<sz;i++)
			{
				printf("%d ",arr[i]);
			}
	    return 0;
    }
    

在这里插入图片描述

8 补充

1 sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组
2 &数组名,取出的是数组的地址,表示整个数组
除了上面1,2两种情况之外,所有的数组名都表示数组首元素的地址

int arr[10]={1,2,3,4,5};
	
	printf("%p\n",arr);	//数组首元素的地址
	printf("%p\n",&arr[0]);//数组首元素的地址
	 printf("%p\n",&arr[0]+1);//数组第二个元素的地址
	printf("%d\n",arr[0]);//数组的第一个元素
	printf("%p\n",&arr);//数组的地址
    printf("%p\n",&arr+1);//数组末尾在后面一个的地址
    printf("%d\n",*arr);//数组的第一个元素

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值