iOS笔记:第七篇 C语言 数组

2024-09-02 12:08

本文主要是介绍iOS笔记:第七篇 C语言 数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


第一节            数   组

1. 数组

 作用:用来存储多个数据.

 数组与普通变量的区别:

     1数组可以存储多个数据,普通变量只能存储一个数据

     2数组中的多个数据共存,普通变量只能有一个.

 数组的特点:

     1)存储多个数据

     2存储的多个数据的类型必须要相同.这个类型在创建数组的时候指定.

     3数组的长度固定.数组可以存储的数据的个数是固定的.

           在创建数组的时候就要指定这个数组到底能存储多少个数据.

            一旦指定,无法更改.

     4存储在数组中的数据非常方便管理.

  数组其实就是用来存储一组数据.

2. 如何去创建1个用于存储多个数据的数组.

1).在创建数组之前要确定的事情

    -> 数组之中能够存储那些类型的数据.

    -> 数组之中要存储多少个数据.

2).语法:

      数组之中存储的数据的类型数组名称[数组之中能够存储的数据的个数];

      array: 数组.

      int arr[3];

       表示.创建了1个数组.数组的名字叫做arr.这个数组可以存储3个数据,1个数据的类型要求都是int类型的.

3).数组是用来存储多个数据.既然是来存储数据的那么就必须要在内存中开辟空间.

    划分为多少个小空间是根据声明数组的时候,中括弧中的数字来决定的.每一个小空间的类型是根据声明数组的时候,指定的每一个数据的类型来决定的.这些小空间就是用来存储数据的.

    4).专业的术语

   元素:数组之中用来存储数据的每一个小空间就叫做数组的元素.

    下标/索引:为了区分数组中的每一个元素.C就为每一个元素编了一个号码这个号码从0开始依次的递增.这个号码就叫做元素的下标.

    数组的长度:数组之中能存储多少个数据.

3. 如何往数组之中存储数据.

1). 数组之中存储数据的是数组的元素.我们应该将数据赋值给数组的元素而不数组.

       int arr[3];

       arr = 10; 这么写是错误的.因为真正存储数据的是数组之中的元素.

2). 我们往数组之中存储数据,实际上应该将数据赋值给数组之中的元素.

       数组之中有很多个元素,通过数组的下标来确定.

        语法:数组名[下标] = 数据;

       arr[0] = 10;  10这个数据赋值给arr数组之中的下标为0的元素.

        注意: arr[0]指的是 arr数组中下标为0的元素.

3). 注意:

      1)如果为元素赋的值的类型和元素的类型不一致,这个时候就会做类型转换.

      2)下标越界的问题.就是访问数组的元素的时候注意下标不要超过范围.

           数组的下标的范围: 0 ->长度-1

4. 如何将数组中的数据取出来.

1). 数组中有很多个元素,通过下标来确定.

      数组名[元素的下标];

2). 取值的时候也要注意下标越界问题,如果下标越界了,取出来的值就是一个垃圾值.

5.数组的遍历

  遍历的原理:将数组的元素的每1个下标遍历出来.

              0 --> 长度-1将这个范围中的每1个整数遍历出来

              当做数组的下标取出.

    for(int i = 0; i < 数组的长度; i++)

   {

        arr[i] 就可以拿到每1个元素的值;

   }

6. 数组要注意的细节问题

1.数组的声明.

      元素的类型数组名[数组的长度];

      指定长度的时候不能是负数但是可以是0但是没有意义.

       数组的长度可以用变量

      数组的长度也可以用1个表达式.

2.数组的初始化

  ->. 如果我们声明一个数组,没有为数组的元素赋值,那么数组的元素的值一个垃圾值.

   -> 声明数组的元素的同时就为数组的元素赋值.

           int arr[5] = {10,20,30,40,50};

           在大括弧中的数据会依次的赋值给每一个元素.

           但是在给值的时候,数据的个数不要超过元素的个数.

           int arr[] = {10,20,30,40,60,70}

           数组的个数根据后面给的数据的个数来定

           算数组的长度:数组占用的字节数 / 1个元素占用的字节数.

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

           后面值给1个数据.按照顺序赋值给每1个元素.如果没有初始化的元素就自动的初始化为0.

           只要有1个元素被初始化了那么其他的元素就被自动初始化为0.

   也可以指定初始化数据为那个元素.没有指定初始化的元素自动初始化为0.

 

第二节 数组的存储

1. 变量在内存中如何存储的.

1). 内存中存储数据的最小基本单位是字节.1个字节由8个二进制位组成.

  并且每1个字节在内存之中都有1个独一无二的地址.

 2).声明1个变量实际上就是在内存中申请指定个数字节的空间用来存储数据.

 int num; 4         float     4

 double   8        char      1

 3). 为变量申请字节空间的时候,是由高地址向低地址申请的.

 先声明的变量在高地址.后声明的变量在低地址.

4). 变量中的数据都是数据的补码二进制形式存储的.

 低位存储在低字节.高位存储在高字节.

5). 变量的地址

 是变量中首字节的地址.

6). 如何取出变量的地址.

  &取地址符.  %p

2. 数组在内存中是如何存储的.

a. 数组其实就是在内存中申请连续的空间用来存储数据.

   int arr[3]; 在内存之中申请3个连续的int类型的空间.

 

 b.数组的第0个元素低字节的那个变量.

 c.为每1个元素赋值的时候.是将数据的补码存储在对应的字节之中.

3. 数组的长度的计算方法.

数组占用的字节数: 数组中所有的元素占用的字节数.

元素占用的字节数: 1个元素占用的字节数.

如何计算数组中元素的个数 数组占用的字节数 1个元素占用的字节数.

sizeof(数组) /  sizeof(元素类型);

4. 数组的地址问题.

数组的地址是下标为0的元素的地址.

     而数组的第0个元素的地址0个元素的低字节的地址.

 数组名中存储的是数组的地址.

5. 元素的地址

 拿到数组的元素的地址.

数组的元素的本质是变量.

通过取地址符来拿到.

 &arr[0];

如果要通过scanf为数组的元素赋值.要取到元素的地址传入

    int arr[3] = {10,20,30};

    arr 数组名种存储的是数组的地址.

    数组的地址是:0个元素的地址也就是第0个元素的低字节的地址.

     arr[0]; 这个是拿到下标为0的元素的值.

    &arr[0]; 这个是拿到下标为0的元素的地址,也就是数组的地址.

数组名 ==  数组的地址 == 下标为0的元素的地址 ==下标为0的元素的低字节的地址

4. 数组越界

    a. 当访问数组中不存在的元素的时候,运行会报错.

    b. 取值的时候,下标如果越界了,那么取到的值是一个垃圾值.

    c. 越界访问的时候编译器是允许的.但是不要这么做.

        因为当越界访问的时候,访问到的不是数组的元素了,极度有可能你访问到的空间是被系统占用的,也有可能是别的程序占用的.越界访问很危险

 

第三节

1、  选择排序




2.冒泡排序:







这篇关于iOS笔记:第七篇 C语言 数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129914

相关文章

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识