黑马程序员——IOS基础(数组)

<a target=_blank href="http://www.itheima.com" target="_blank" style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------</a>


一、一维数组的定义和一维数组元素的引用

     1.一维数组的定义

        类型名  数组名[整型常量表达式]

        例如:

        Int a[8];

       说明:(1)a数组含有8个元素,且每个元素都是整型。

                   (2)每个元素都有一个下标,第一个元素的下标总为0。

 

      2.一维数组元素的引用

         引用形式如下:

         数组名 [下标表达式]

         说明:(1)在引用数组元素时,数组元素中下标表达式的值必须为整数,下标表达式值的下限为0

                    (2)一个数组元素实质上就是一个变量名,代表内存中的一个存储单元,一个数组占有一串连续的存储单元

                    (3)一个数组不能整体引用,数组名是一个存放这个数组的首地址的常量

 

         3.一维数组的初始化

              Int a[8] = {0,1,2,3,4,5,6,7,}; /* 依次给数组元素赋初值 */

              Int a[8]= { 0 };                                     /* 当所赋初值少于所定义数组元素个数是,将自动给后面的元素补以初值0 ,

                                                                            如果所赋初值多于所定义数组的元素个数时,在编译时将给出错误信息*/

              Int a[ ]={0,0,0,0,0,0,0,0};                     /* 隐含定义了a数组含有8个元素 */

 

二、一维数组和指针

         1.一维数组和元素的地址

          在函数体中函数外部定义的数组名可以认为是一个存放数组元素第一个元素地址的指针变量,只是这个指针变量中的

      地址值不可改变,

          float  a[0], *p, x;

          a= &x; a++;               /* 这些操作都是非法的,不能给啊重新赋值。 */

          p= a+1;                     /* 指针p将指向数组中的第二个元素,可以通过表达式:a+k获取每个元素的地址 。 

                                                也可以通过 *(a+k)的形式来引用数组元素。 */


三、函数之间对一维数组和数组元素的引用。  

        1.数组元素作实参

              数组元素可以像普通变量一样作为实参传递给形参,对应的形参必须为同类型的变量。在函数中只对该变量进

        行操作而不能在函数中改变对应数组元素中的值。

        

        2.数组名作实参

               数组名可以作为实参传送,对应的形参应当是一个指针变量并且类型与数组类型一致。在函数中可以通过该指

        针变量来引用调用函数中对应的数组元素,从而对数组元素进行操作而改变其中的值。

         

         3.数组元素地址作为实参

            当数组元素地址作为实参时,因为是地址,所以对应的形参也应当是基类型相同的指针变量

          /* 对具有10个元素的char类型数组,从下标为4的元素开始,全部设置星号“ * ”,保持前4个元素中的内容不变。*/

                程序如下:

                 #include <stdio.h>

                 #define M 10

                 #define B 4

                 void setstar (char *,int):

                 void arrout (char *,int);

                 main( )

                 { char c[M]={'A','B','C','D','E','F','G','H','I'.'J'};

                 setstar (&c[4,M-B]);

                 arrout(c,M);

                  {

                     int i;

                     for(i=0;i<n;i++)

                           *(a+i)=' * ';

                   }

                 void arrout (char *a,int n)

                   {

                      int i;

                      for (i=0;i<n;i++)

                         printf("%c",a[i]);

                      printf("\n");

                    }

              程序运行结果如下:

                 ABCD******     

                

四、二维数组的定义和二维数组元素的引用

       1.二维数组的定义

          语句形式如下:

              类型名 数组名[常量表达式1] [常量表达式2],. . . . . . ;

              int  a[3][4];

          说明:(1)定义了一个名为a的二维数组。

                     (2)a数组中每个元素都是整型。

                     (3)a数组中共有3*4个元素。

                     (4)a数组的逻辑结构是一个具有如下形式的3行4列的矩阵

                                       第0列            第1列           第2列           第3列

                      第0行       a[0][0]           a[0][1]           a[0][2]          a[0][3] 

                      第1行       a[1][0]           a[1][1]           a[1][2]          a[1][3] 

                      第2行       a[2][0]           a[2][1]           a[2][2]          a[2][3] 


                 2.二维数组元素的引用

               引用形式:

                     数组名 [下标表达式1][下标表达式2]

                      有数组定义: double w[4][2];

                则w[0][1]、w[i][j]都是合法的数组元素引用形式,但每个下标表达式不能超越数组定义中的上、下界。


             3.二维数组的初始化

               可以在定义二维数组的同时给二维数组的各元素赋初值

                int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};            /* 所赋初值个数与元素个数相同 */

                int a[4][3]={{1,2},{4,5},{7},{10}};    /* 所赋初值个数少于元素个数,这时系统将自动给该行后面的元素补初值0  */

                int a[4][3]={{1,2},{4,5}};    /* 所赋初值行数少于数组行数,系统将自动给后面各行的元素补初值0 */

                int a[ ][ ]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}}  /* 通过赋初值定义二维数组的大小 */

                    

             4.二维数组和指针

                  二维数组名同样也是一个存放地址常量的指针,其值为二维数组中第一个元素的地址。二维数组元素的地址可以由

             表达式&a[i][j]求得,也可以通过每行的首地址来表示。

                 若0<=i<3、0<=j<4,则a[i][j]的地址可以用以下五种表达式求得

                    (1)&a[i][j]

                      (2)a[i]+j

                      (3) *(a+i)+j

                      (4)&a[0][0]+4*i+j         /* 在i行前尚有4*i个元素存在 */

                      (5)a[0]+4*i+j

                   a数组可以用以下五种表达式来引用                  

                       (1)a[i][j]

                       (2) *(a[i]+j)

                       (3) *(*(a+i)+j)

                       (4) *(&a[0][0]+4*i+j)         

                       (5) *(a[0]+4*i+j)


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

数据集介绍:神经元细胞核检测数据集 一、基础信息 数据集名称:神经元细胞核检测数据集 图片数量: - 训练集:16,353张 - 测试集:963张 分类类别: - Neuron(神经元细胞核):中枢神经系统的基本功能单位,检测其形态特征对神经科学研究具有重要意义。 标注格式: - YOLO格式,包含边界框坐标及类别标签,适用于目标检测任务 - 数据来源于显微镜成像,覆盖多种细胞分布形态和成像条件 二、适用场景 神经科学研究: 支持构建神经元定位分析工具,助力脑科学研究和神经系统疾病机理探索 医学影像分析: 适用于开发自动化细胞核检测系统,辅助病理诊断和细胞计数任务 AI辅助诊断工具开发: 可用于训练检测神经元退行性病变的模型,支持阿尔茨海默症等神经疾病的早期筛查 生物教育及研究: 提供标准化的神经元检测数据,适用于高校生物学实验室和科研机构的教学实验 三、数据集优势 大规模训练样本: 包含超1.6万张训练图像,充分覆盖细胞核的多样分布状态,支持模型深度学习 精准定位标注: 所有标注框均严格贴合细胞核边缘,确保目标检测模型的训练精度 任务适配性强: 原生YOLO格式可直接应用于主流检测框架(YOLOv5/v7/v8等),支持快速模型迭代 生物学特性突出: 专注神经元细胞核的形态特征,包含密集分布、重叠细胞等真实生物场景样本 跨领域应用潜力: 检测结果可延伸应用于细胞计数、病理分析、药物研发等多个生物医学领域
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值