1、一维数组

  数组:具有相同类型的成员组成的一组数据

  1> 定义

    元素:数组中存放的数据成为数组的元素
       数组是构造类型,用{...}来给构造类型赋初始值,类型修饰符用来表示元素的类型
    类型修饰符 数组名[数组元素个数] = {值1,值2,值3....};                    

    定义的形式:

      第一种形式

        int ageArray[] = {, , , , }; 

      第二种形式

        数据个数 > 设置初始值的个数,没有初始值的元素默认是0

        int ageArray1[] = {, , };

      第三种形式
          int ageArray2[] = {}; 
      第四种形式
        根据设置的初始值来推断元素个数
        int ageArray3[] = {, , , , };
       变量作为下标定义数组时,不能初始化

  1. int num = ;
  2. // [变量] 不能赋初始值
  3. int array[num];
  4. for (int i = ; i < ; i++) {
  5. array[i] = i;
  6. printf("%d ", array[i]);
  7. }

    定义数组的错误形式
      内存溢出:定义的初始值的个数 > 数据个数
     1 int heightArray[5] = {184, 183, 160, 168, 160, 190};

  2> 数组的存储空间

    数组在存储时申请的是一块连续的存储空间
    数组的存储空间 = 元素个数 * 每一个元素所占的空间大小

  1. int array[] = {, , , , };
  2. printf("sizeArray = %lu\n", sizeof(array));

  3> 数组的访问 [常量或者是变量]
    数组名[下标] 下标的范围:0~n-1, n 代表数组元素个数    

  1. int ageArray[] = {, , , , };
  2. printf("wanghai = %d\n", ageArray[]);
  3. printf("yanping = %d\n", ageArray[]);

    使用循环访问数组中所有的元素(数组遍历,通常和for循环结合使用)  

  1. for (int i = ; i < ; i++) {
  2. printf("age = %d\n", ageArray[i]);
  3. }

    访问越界

  1. double weightArray[] = {, , , , , };
  2. for (int i = ; i < ; i++) {
  3. printf("weight = %.2f\n", weightArray[i]);
  4. }
  5. printf("%.2f", weightArray[]); // 访问越界

  练习:复制一个数组,即两个数组容量一样,把其中一个数组中的元素复制到另外一个数组中 

  1. int array1[] = {, , , , };
  2. int array2[] = {};
  3. //array2 = array1;
  4. // 数组不能整体赋值
  5. for (int i = ; i < ; i++) {
  6. array2[i] = array1[i];
  7. printf("array2[%d] = %d\n", i, array2[i]);
  8. }

2、冒泡排序

  排序的规律:升序、降序
  基本思路:每次相邻的两个元素比较,按照升序或降序的顺序交换位置,直到所有的元素位置全部正确
  至少需要两层循环
    外层循环控制比较的趟数
    内存循环控制比较的次数

  1. int array[] = {, , , , };
  2. // 控制循环的趟数
  3. for (int i = ; i < - ; i++) {
  4. // 控制每趟比较的次数
  5. for (int j = ; j < - i - ; j++) {
  6. // 比较相邻的两个元素
  7. if (array[j] > array[j + ]) {
  8. // 交换两个元素的位置
  9. int temp = array[j];
  10. array[j] = array[j + ];
  11. array[j + ] = temp;
  12. }
  13. }
  14. }
  15. // 遍历数组输出
  16. for (int i = ; i < ; i++) {
  17. printf("%d ", array[i]);
  18. }

3、字符数组

  1> 定义  

  1. char array1[] = {'h', 'e', 'l', 'l', 'o'};
  2.  
  3. // 未设置的元素默认是0
  4. char array2[] = {'w', 'o', 'r', 'l', 'd'};
  5.  
  6. char array3[] = {};
  7.  
  8. char array[] = {'i', 'P', 'h', 'o', 'n', 'e'};

  2> 字符串

  1. char array[] = "iPhone";
  2. // 相当于
  3. char array1[] = {'i', 'P', 'h', 'o', 'n', 'e', '\0'};

    字符串以 '\0' 结尾,字符串的本质就是字符数组

    访问字符串    

  1.     1 // 访问单个字符
  2.      char array[] = "iPhone";
  3.      for (int i = ; i < sizeof(array); i++) {
  4.      printf("%c ", array[i]);
  5.      } 
  1.     1 // 整体访问
  2.      char array1[] = {'i', 'P', 'h', 'o', 'n', 'e', '\0'};
  3.      printf("%s\n", array1);

  3> 字符串和字符数组的区别

    字符串就是一个字符数组  

  1. char a[] = "iPad";
  2. char b[] = {'i', 'P', 'a', 'd', '\0'};

      数组a和数组b等价

    字符数组不一定是字符串 

  1. char c[] = {'l', 'a', 'n', 'o', 'u'};
  2. char d[] = "lanou";

      c和d不等价,数组 c 包含个有效字符,数组 d 包含个字符,其中有个有效字符, '\0' 是结束标识符

  4.字符串操作函数

    strlen():计算字符串有效字符的个数    

  1. char array[] = "iPhone";
  2. unsigned long length = strlen(array);
  3. printf("length = %lu\n", length);
  4.  
  5. char array1[] = "iMac";
  6. int length1 = (int)strlen(array1); // 类型强转
  7. printf("length1 = %d\n", length1);

    strcpy 字符串拷贝:strcpy(字符串1,字符串2);
      把字符串2的内容拷贝到字符串1中
      字符串1的长度 >= 字符串2的长度 

  1.     1 char array1[] = "lanou";
  2.      char array2[] = {};
  3.      strcpy(array2, array1);
  4.      printf("array2 = %s\n", array2);

    strcat字符串拼接:strcat(字符串1,字符串2);
      把字符串2的内容拼接到字符串1后面,结果保存在字符串1中
      字符串1的存储空间要足够大

  1.     1 char array1[] = "lanou";
  2.      char array2[] = "keji";
  3.      strcat(array1, array2);
  4.      printf("array1 = %s, array2 = %s\n", array1, array2);

    strcmp()字符串比较:strcmp(字符串1, 字符串2)
      按照自左向右的顺序逐个字符比较(比较字符的ASCII值),直到遇到第一个不同的字符或者 '\0' 结束。
         结果 > 0    字符串1 > 字符串2
         结果 < 0    字符串1 < 字符串2
         结果 = 0    字符串1 = 字符串2

  1.     1 char array1[] = "lanou";
  2.      char array2[] = "keji";
  3.      printf("%d\n", strcmp(array1, array2));
  4.      char array[] = "iPhone";
  5.      printf("%lu\n", sizeof(array));

  练习:将字符串 倒转
    例如:“afjnpue”转变成字符串“eupnjfa”
    (注:是改变 字符串本身,不是 反向输出)

  1. char array[] = "afjnpue";
  2. int length = (int)strlen(array);
  3. for (int i = ; i < length / ; i++) {
  4.  
  5. int temp = array[i];
  6. array[i] = array[length - - i];
  7. array[length - - i] = temp;
  8.  
  9. }
  10. printf("%s\n", array);

4、宏定义

  无参的宏
   #define 宏名称 定义的值
   宏命名: 1.k+驼峰命名法  2.字母全部大写  

  1. #define kPrint printf("Hello World!\n")
  2. #define COUNT 10

  有参的宏   

  1. #define MUL(A, B) ((A) * (B))
  2.  
  3. // 2 * 3
  4. int result = MUL(, );
  5. printf("result = %d\n", result);
  6.  
  7. //(3 - 1) * (4 + 2)
  8. int result1 = MUL( - , + );
  9. printf("result1 = %d\n", result1);

iOS学习04C语言数组的更多相关文章

  1. iOS学习06C语言结构体

    1.结构体的概述 在C语言中,结构体(struct)指的是一种数据结构,是C语言中构造类型的其中之一. 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高 ...

  2. C语言基础:数组 分类: iOS学习 c语言基础 2015-06-10 21:40 7人阅读 评论(0) 收藏

    数组:是由一组具有相同数据类型的数据组合而来. 数组定义:元素类型修饰符 数组名[数组个数]={元素1,元素2....};  int arr[ 2 ]={1,2};    //正确 int arr[ ...

  3. C语言基础:二维数组 分类: iOS学习 c语言基础 2015-06-10 21:42 16人阅读 评论(0) 收藏

    二维数组和一位数组类似. 定义: 数据类型 数组名[行][列]={{ },{ }....}; 定义时,一维(行)的长度可以省略,但是二维(列)的长度不可以省略.但是访问时,一定使用双下标. 二维数组的 ...

  4. iOS学习05C语言函数

    本次主要是学习和理解函数,函数树状图如下: 1.函数的声明和定义 函数定义的四要素分别为: 返回值类型 :函数的结果值类型,函数不能返回数组. 指定返回类型是void类型说明函数没有返回值. 函数名 ...

  5. C语言基础总结 分类: iOS学习 c语言基础 2015-06-11 10:08 23人阅读 评论(0) 收藏

    //欲练此功必先自宫!!!     //第一天:C语言的基础     //进制     //2进制, 10进制, 8进制, 16进制     //注:8进制数前加0, 16进制数前加0x        ...

  6. iOS学习09C语言函数指针

    本次主要学习和理解函数指针 1.函数指针 void printValue(int number) { printf("number = %d\n", number); } int ...

  7. c语言基础:数据类型 分类: iOS学习 c语言基础 2015-06-10 21:43 9人阅读 评论(0) 收藏

    C语言基本数据类型大体上分为: 整型 和 浮点型   字节: 计算机中最小的储存单位     1 Byte = 8 bit 整型:         int     4                  ...

  8. iOS学习02C语言分支结构

    1. BOOL类型 返回值:真:YES  假:NO BOOL数据类型占一个字节的内存空间,占位符为%d. 计算机在识别时,YES就替换成1,NO就替换成0. bool是C语言中的布尔类型,返回值为tr ...

  9. C语言基础:函数指针 分类: iOS学习 c语言基础 2015-06-10 21:55 15人阅读 评论(0) 收藏

    函数指针:指向函数的指针变量. 函数名相当于首地址. 函数指针定义:返回值类型  (*函数指针变量名)(参数类型1,参数类型2,....)=初始值 函数指针类型:返回值类型  (*)(参数类型1,参数 ...

随机推荐

  1. backtracking(回溯算法)

    http://blog.csdn.net/zxasqwedc/article/details/42270215 permutation的程式码都会长成这样的格式: ] = { 'a', 'b', 'c ...

  2. Xcode常用代码块

    Xcode的代码片段(Code Snippets)创建自定义的代码片段,当你重用这些代码片段时,会给你带来很大的方便. 常用的: 1.strong:@property (nonatomic,stron ...

  3. ThinkPHP入门(二)

    smarty使用 smarty引入流程 1. 控制器IndexAction.class.php function index() $this -> display(); (父类Action的di ...

  4. Quartus 11.0 的AS 下载方式和JTAG下载jic文件的方式

    FPGA下载的三种方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式: AS由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,EPCS系列.如EPCS1,EP ...

  5. Ubuntu开机自启动

    http://www.jb51.net/os/Ubuntu/181138.html http://blog.csdn.net/elim051/article/details/6173367

  6. 让那些为Webkit优化的网站也能适配IE10(转载)

    转载地址:http://www.w3cplus.com/css3/adapting-your-webkit-optimized-site-for-internet-explorer-10.html 特 ...

  7. Android数据缓存(转)

    Android数据缓存   1.http://blog.csdn.net/lnb333666/article/details/8460159 2.https://github.com/Trinea/a ...

  8. Cygwin的安装,卸载,以及安装gdb

    转载来源 http://10000001.blog.51cto.com/4600383/1341484   1.安装 其实Cygwin的安装时很简单的,需要的安装相应的就可以了,要详细的去网上找,很多 ...

  9. Sql Server 基础知识

    Sql Server 基础知识: http://blog.csdn.net/t6786780/article/details/4525652 Sql Server 语句大全: http://www.c ...

  10. JQuery常用函数及功能小结--转载

    1.文档加载完成执行函数 $(document).ready(function(){  alert("开始了"); }); 2.添加/删除CSS类 $("#some-id ...