c语言 数组

本文详细介绍了C语言中的一维数组和二维数组的初始化、输入输出及赋值方法。同时阐述了数组在内存中的存储方式。接着讨论了指针与数组的关系,指出数组名是指向首元素的指针,并通过例子说明了数组和指针的等价性。最后,探讨了函数如何处理数组,强调函数参数通常接收数组地址,即指针,并举例说明了不同函数声明方式的含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一维数组

mind:
数组是一组变量

1.初始化:

  • 省略[]:sizeof array/sizeof array[0]
  • 补0
  • 定位

2.输入,输出,赋值:for循环

3.数组大小:数组大小是一个数(非负整数)


二维数组

mind:
1.二维数组是 数组的数组/一个矩阵的变量
2.二维数组在内存中顺序存储

1.初始化:

  • 一组变量的初始化–>一组数组的初始化
  • 顺序初始化
/*二维数组的初始化*/
#include <stdio.h>
int main(void)
{
//  int rain[2][3]={
//  {1,3,2},
//  {4},
//  };

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

    int i,j;
    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("%d\n", rain[i][j]);
        }
    }

    return 0;
 } 

2.输入,输出,赋值:for双重循环

/*针对若干年的降水量数据,计算年降水总量,年降水平均量,月降水平均量*/
#include <stdio.h>
#define YEARS 5
#define MONTHS 12
int main(void)
{
    const float rain[YEARS][MONTHS]={
    {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
    {8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
    {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
    {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
    {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2},
    };

    printf("YEARS   RAINFULL(inches)\n");
    int years, months;
    double subtot, total;
    for(years=0,total=0;years<YEARS;years++) {//1.外层循环进入一次,出去一次 
        for(months=0,subtot=0;months<MONTHS;months++){
            subtot+=rain[years][months];//内层循环进入五次,出去五次 
        }                                   //2.一次for循环:初始条件执行一次,判断条件执行很多次,动作也会执行很多次; 3.双重循环的几何意义:先定行/列,再定列/行 
        printf("%d  %.1f\n", years+2000, subtot);
        total+=subtot;
    }

    printf("\n");

    printf("年降水平均量是%.1f\n", total/YEARS);

    printf("\n");

    int index;
    printf("MONTHS  MONTHLY AVERAGE\n"); 
    for(months=0,index=0;months<MONTHS;months++,index++){
        for(years=0,subtot=0;years<YEARS;years++){
            subtot+=rain[years][months];
        }
        printf("%d  %.1f\n", index+1, subtot/YEARS);
    }   

    printf("\n");
    return 0;

 } 

指针和数组

mind:
1.数组名是指向数组类型的指针,是指向数组首元素的指针

  • dates+i==&dates[i]
  • (dates+i)==dates[i]

2.数组==数组名,数组元素


函数和数组

mind:
用函数处理数组,函数接收的是(/数组)地址/指针
用函数处理数组的工具就是指针,调用函数的过程就是让指针指向数组

  • declaration中:int *ar==int ar[ ] , int ==int ar , int ar[ ]==int [ ]
  • int *ar表示ar是指向int的指针,在函数声明中,int ar[ ]也表示ar是指向int的指针

eg1.

/* 用函数处理数组 对数组进行求和(单指针参数-->表明起点) */
#include <stdio.h>
#define SIZE 10
int sum(int ar[], int n);//函数declaration在main函数之前 
int main(void)
{
    int marbles[SIZE]={20,10,5,39,4,16,19,26,31,20};
    int answer;
    answer=sum(marbles, SIZE);//调用过程中:int *ar=marbles,int n=SIZE(ar-->marbles,n=SIZE) 
    printf("the total number of marbles is %d", answer);
    return 0;   
 }

int sum(int *ar, int n)//函数head,body在main函数之后 
{
    int i;
    int total;
    for(i=0,total=0;i<n;i++){
        total+=ar[i];//求和 total+=ar[i]; 
    }
    return total;
 } 

eg2.

/* 用函数处理数组 对数组进行求和(双指针参数-->表明起点和终点) */
#include <stdio.h>
#define SIZE 10
int sum(int *, int *);
int main(void)
{
    int marbles[SIZE]={20,10,5,39,4,16,19,26,31,20};
    int answer;
    answer=sum(marbles, marbles+SIZE);//调用过程中:int *start=marbles,int *end=marbles+SIZE(start-->marbles,end-->marbles+SIZE) 
    printf("the total number of marbles is %d", answer);
    return 0;   
 }

int sum(int *start, int *end)//已经定义了两个指向int类型的指针start和end 
{
    int total=0;
    while(start<end){
        total+=*start++;
    }
    return total;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值