#pragma mark - 数组:用来存放同一数据类型的数据

// 数组的定义:类型说明符 数组名[常量表达式] = {值1, 值2, 值3...};
    // 定义一个float类型的数组,用来存储班级学员的分数
    float scores[5] = {89.0, 70.2, 66.0, 90.5, 77.8};
    // 定义一个int类型的数组,用来存放三个人的年龄
    int ages[5] = {23, 28, 19};
    // 定义一个char类型的数组,用来存放iPhone
    char iPhone[10] = {'i', 'P', 'h', 'o', 'n', 'e'}; // 当定义数组的时候不给定数组的元素个数,系统会自动根据后面的赋值情况进行计算
    
    // 字符串的定义形式如下,字符串其实是一个特殊的字符数组,在字符串的最后面系统自动加了'\0'
    char iPhone6s[] = "iPhone6s";
    
    // 在C99之后,数组的元素个数可以使用变量表示,但是不能进行初始化
//    int count = 5;
//    int array[count] = {2, 3};
    
    // 数组不能整体参与运算
    
    // 访问数组里面的元素,通过: 数组名 + 下标。下标是从0开始的,数组中最后一个元素的下标是:n - 1(n是数组的元素个数)
    
//    printf("ages[0] = %d\n", ages[5]); // 数组越界,数组越界很可能出现问题
//    int array1[3] = {2, 3, 4, 6};
    
    for (int i = 0; i < 5; i++) {
        printf("ages[%d] = %d\n", i, ages[i]);
    }
    
    // 更改数组中对应位置的值, 数组中的元素是一个变量
    ages[3] = 30;
    
    printf("%s\n", iPhone6s); // 输出一个字符串使用%s

#pragma mark - 冒泡排序,排序后的数组小的元素在前面,大的元素在后面

int array[6] = {12, 8, 11, 32, 36, 48};
    int count = 0; // 用来记录冒泡排序过程中比较的次数
    for (int i = 0; i < 6 - 1; i++) { // 外层循环控制趟数
        BOOL flag = YES; // 假设数组已经是有序的,YES代表有序,NO代表无序
        for (int j = 0; j < 6 - 1 - i; j++) { // 内层循环控制每趟比较的次数
            if (array[j] > array[j + 1]) { // 如果前面的数比后面的数大的话,把两个数进行交换
                int temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
                flag = NO; // 如果有交换发生,那么说明我之前的假设是错误的,该数组当前是无序的
            }
            count++; // 没进行一次比较,count加1
        }
        if (flag == YES) { // 通过该趟比较,发现没有数据交换,那么说明数组已经是有序的数组,跳出循环。
            break;
        }
    }
    // 循环打印看是否排序成功
    for (int i = 0; i < 6; i++) {
        printf("%d\n", array[i]);
    }
    printf("一共比较了%d次", count);

#pragma mark - 字符数组,用来存放字符类型变量的数组

char iPhone6[] = {'i', 'P', 'h', 'o', 'n', 'e'};
    char iPhone[] = "iPhone"; // 也称为字符串,系统会自动在最后加'\0'
    printf("%lu\n", sizeof(iPhone6));
    printf("%lu\n", sizeof(iPhone));
    
    // 字符串操作函数
    // strlen(),求字符串的长度,从第一个字符开始,遇到'\0'结束,每有一个字符,长度加1,计算出来的长度不包括'\0'
    printf("%lu", strlen(iPhone));
// strcpy()字符串拷贝。strcpy(目标字符串, 源字符串)把源字符串拷贝到目标字符串中,保证目标字符串的长度大于源字符串长度。
    char desString[30];
    char sourceString[] = "I Love You!";
    strcpy(desString, sourceString);
    printf("desString = %s\n", desString);

// strcat()字符串拼接。strcat(字符串1, 字符串2)把字符串2拼接到字符串1的后面。首先找到字符串1中'\0'的位置,然后从该位置开始,把字符串2的所有字符拼接到后面,最后加'\0'
    char str1[20] = "I Love ";
    char str2[] = "You!";
    strcat(str1, str2);
    printf("%s\n", str1);

strcmp()字符串比较。strcmp(字符串1, 字符串2)把字符串1和字符串2中对应位置的字符进行比较,返回第一个不相同字符的ASCII的差值。
    char str1[] = "I Love You!";
    char str2[] = "I Miss You!";
    int value = strcmp(str1, str2);
    printf("%d\n", value);

// 二维数组的定义:数组的数组。
    // 类型 数组名[常量表达式1][常量表达式2] = {0};
    // 定义一个2行3列的数组
    int array[2][3] = {{23, 26, 32}, {12, 39, 20}};
    printf("%d\n", array[1][1]); // 从二维数组里面取对应的元素
    array[0][0] = 0; // 更改二维数组里面对应位置的元素
    
    int array1[][3] = {2, 3, 4, 2, 45}; // 对于二维数组来说,可以省略行数,系统会根据列数自动计算行数,不足的补0(整形二维数组)

// 定义了一个2行3列的数组
    int array[2][3] = {24, 32, 29, 12, 16, 30};
    // 定义一个3行2列的数组来接收array行列交换之后的数据
    int array1[3][2] = {0};
    for (int i = 0; i < 2; i++) { // 外层循环控制行数
        for (int j = 0; j < 3; j++) { // 内层循环控制列数
            // 把array中行和列的元素进行交换
            array1[j][i] = array[i][j];
        }
    }
// 字符串数组
    char mobileSystem[3][10] = {"iOS", "Android", "WinPhone"}; // 第一个[]里面的数字,表示的是字符串的个数,第二个[]里面的数字表示的是字符串的最大长度 + 1
    
    printf("mobileSystem[0] = %s\n", mobileSystem[1]); // 访问字符串数组中的某一个字符串,采用数组名[第一维下标]
    printf("%c\n", mobileSystem[2][3]); // 从字符串数组中取某个字符的时候,采用数组名[第一维下标][第二维下标]

C语言 ---- 数组 iOS学习-----细碎知识点总结的更多相关文章

  1. C语言 ---- 指针 iOS学习-----细碎知识点总结

    内存的访问形式:1.直接访问:通过变量名进行访问.2.间接访问:先找到变量存放的地址,然后根据地址去访问对应的内存空间. 指针--- // 定义一个整形指针变量,用来存储num1在内存中的地址    ...

  2. OC ---- 字符串 数组 iOS学习-----细碎知识点总结

    NSString *urlString = [NSString stringWithFormat:@"http://www.apple.com"];        // 获取字符串 ...

  3. C语言 ---- 函数 结构体 iOS学习-----细碎知识点总结

    函数的定义     返回值类型 函数名(形式参数列表) {        函数的实现     } 函数不允许嵌套定义 如果函数的定义在主调函数之后,那么要进行提前声明才能使用. // 匿名结构体,结构 ...

  4. C语言 ---- 循环分支 iOS学习-----细碎知识点总结

    #import <Foundation/Foundation.h>  // #import是OC种的导入头文件或者是系统框架的指令 // 定义了一个Season枚举类型enum Seaso ...

  5. C语言 ---- 基本数据类型和基本运算 iOS学习-----细碎知识点总结

    // 导入头文件(stdio.h),标准输入输出的头文件,#include <stdio.h> // 程序的入口int main(int argc, const char * argv[] ...

  6. OC ---- 字典集合 iOS学习-----细碎知识点总结

    实例方法的创建 NSDictionary *wukong = [[NSDictionary alloc] initWithObjectsAndKeys:", @"age" ...

  7. C语言数组的学习

    什么是数组? 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组. 在C语言中,数组属于构造数据类型.一个数组可以分解为多个数组元素,这 ...

  8. IOS学习笔记48--一些常见的IOS知识点+面试题

      IOS学习笔记48--一些常见的IOS知识点+面试题   1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...

  9. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

随机推荐

  1. BZOJ2061 : Country

    记忆化搜索,设$f[i][j]$表示符号$i$一开始kmp指针为$j$,中间匹配了多少次,$g[i][j]$则表示匹配结束后kmp指针的位置. 时间复杂度$O(nl^2)$. #include< ...

  2. Android 情景模式设置

    情景模式的设置大家应当相当熟悉了,但是在Android中如何通过自己的程序进行情景模式的设置呢,情景模式分为多种多种,即可以使用系统自带的,也可 以使用自定义的,但是在开发某些程序时,可能需要在程序中 ...

  3. URAL 1031. Railway Tickets(spfa)

    题目链接 不知为何会在dp里呢...INF取小了,2Y. #include <cstring> #include <cstdio> #include <string> ...

  4. 51nod算法马拉松14

    这次太丢人了只搞出来了A到D,那就将就写一写A到D... A 棋盘问题 脑筋急转弯题,不难发现每一次两个人只能染白奇数个格子,所以数数有奇数还是偶数个白格子就行了. #include<cstdi ...

  5. iOS 网络框架编写总结

    一,常用 1> 不错的处理接收到的网络图片数据的方法 id img= ISNSNULL(pic)?nil:[pic valueForKey:@"img"]; NSString ...

  6. IOS 蓝牙相关-基础知识(1)

    蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...

  7. java分享第二天(变量及命名规范)

    1 JAVA是一种强类型语言,每个变量都必须声明其类型 2 Java变量是程序中最基本的存储单元,其主要包括变量名,变量类型和作用域 3 声明变量可以一行声明多个 4局部变量:方法或语句块内部定义的变 ...

  8. Redhat5.8 环境下编译安装 Redis 并将其注册为系统服务

    系统环境: $ cat /etc/issueRed Hat Enterprise Linux Server release 5.8 (Tikanga)Kernel \r on an \m 1. 下载安 ...

  9. IDictionary<TKey, TValue> vs. IDictionary

    Enumerating directly over an IDictionary<TKey,TValue>returns a sequence of  KeyValuePair struc ...

  10. JAVA中序列化和反序列化

    一般程序在运行时,产生对象,这些对象随着程序的停止运行而消失(java回收机制)但如果我们想把某些对象(因为是对象,所以有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,可以在程序再次运 ...