iOS学习04C语言数组
1、一维数组
数组:具有相同类型的成员组成的一组数据
1> 定义
元素:数组中存放的数据成为数组的元素
数组是构造类型,用{...}来给构造类型赋初始值,类型修饰符用来表示元素的类型
类型修饰符 数组名[数组元素个数] = {值1,值2,值3....};
定义的形式:
第一种形式
int ageArray[] = {, , , , };
第二种形式
数据个数 > 设置初始值的个数,没有初始值的元素默认是0
int ageArray1[] = {, , };
第三种形式
int ageArray2[] = {};
第四种形式
根据设置的初始值来推断元素个数
int ageArray3[] = {, , , , };
变量作为下标定义数组时,不能初始化
int num = ;
// [变量] 不能赋初始值
int array[num];
for (int i = ; i < ; i++) {
array[i] = i;
printf("%d ", array[i]);
}
定义数组的错误形式
内存溢出:定义的初始值的个数 > 数据个数
1 int heightArray[5] = {184, 183, 160, 168, 160, 190};
2> 数组的存储空间
数组在存储时申请的是一块连续的存储空间
数组的存储空间 = 元素个数 * 每一个元素所占的空间大小
int array[] = {, , , , };
printf("sizeArray = %lu\n", sizeof(array));
3> 数组的访问 [常量或者是变量]
数组名[下标] 下标的范围:0~n-1, n 代表数组元素个数
int ageArray[] = {, , , , };
printf("wanghai = %d\n", ageArray[]);
printf("yanping = %d\n", ageArray[]);
使用循环访问数组中所有的元素(数组遍历,通常和for循环结合使用)
for (int i = ; i < ; i++) {
printf("age = %d\n", ageArray[i]);
}
访问越界
double weightArray[] = {, , , , , };
for (int i = ; i < ; i++) {
printf("weight = %.2f\n", weightArray[i]);
}
printf("%.2f", weightArray[]); // 访问越界
练习:复制一个数组,即两个数组容量一样,把其中一个数组中的元素复制到另外一个数组中
int array1[] = {, , , , };
int array2[] = {};
//array2 = array1;
// 数组不能整体赋值
for (int i = ; i < ; i++) {
array2[i] = array1[i];
printf("array2[%d] = %d\n", i, array2[i]);
}
2、冒泡排序
排序的规律:升序、降序
基本思路:每次相邻的两个元素比较,按照升序或降序的顺序交换位置,直到所有的元素位置全部正确
至少需要两层循环
外层循环控制比较的趟数
内存循环控制比较的次数
int array[] = {, , , , };
// 控制循环的趟数
for (int i = ; i < - ; i++) {
// 控制每趟比较的次数
for (int j = ; j < - i - ; j++) {
// 比较相邻的两个元素
if (array[j] > array[j + ]) {
// 交换两个元素的位置
int temp = array[j];
array[j] = array[j + ];
array[j + ] = temp;
}
}
}
// 遍历数组输出
for (int i = ; i < ; i++) {
printf("%d ", array[i]);
}
3、字符数组
1> 定义
char array1[] = {'h', 'e', 'l', 'l', 'o'};
// 未设置的元素默认是0
char array2[] = {'w', 'o', 'r', 'l', 'd'};
char array3[] = {};
char array[] = {'i', 'P', 'h', 'o', 'n', 'e'};
2> 字符串
char array[] = "iPhone";
// 相当于
char array1[] = {'i', 'P', 'h', 'o', 'n', 'e', '\0'};
字符串以 '\0' 结尾,字符串的本质就是字符数组
访问字符串
1 // 访问单个字符
char array[] = "iPhone";
for (int i = ; i < sizeof(array); i++) {
printf("%c ", array[i]);
}
1 // 整体访问
char array1[] = {'i', 'P', 'h', 'o', 'n', 'e', '\0'};
printf("%s\n", array1);
3> 字符串和字符数组的区别
字符串就是一个字符数组
char a[] = "iPad";
char b[] = {'i', 'P', 'a', 'd', '\0'};
数组a和数组b等价
字符数组不一定是字符串
char c[] = {'l', 'a', 'n', 'o', 'u'};
char d[] = "lanou";
c和d不等价,数组 c 包含个有效字符,数组 d 包含个字符,其中有个有效字符, '\0' 是结束标识符
4.字符串操作函数
strlen():计算字符串有效字符的个数
char array[] = "iPhone";
unsigned long length = strlen(array);
printf("length = %lu\n", length); char array1[] = "iMac";
int length1 = (int)strlen(array1); // 类型强转
printf("length1 = %d\n", length1);
strcpy 字符串拷贝:strcpy(字符串1,字符串2);
把字符串2的内容拷贝到字符串1中
字符串1的长度 >= 字符串2的长度
1 char array1[] = "lanou";
char array2[] = {};
strcpy(array2, array1);
printf("array2 = %s\n", array2);
strcat字符串拼接:strcat(字符串1,字符串2);
把字符串2的内容拼接到字符串1后面,结果保存在字符串1中
字符串1的存储空间要足够大
1 char array1[] = "lanou";
char array2[] = "keji";
strcat(array1, array2);
printf("array1 = %s, array2 = %s\n", array1, array2);
strcmp()字符串比较:strcmp(字符串1, 字符串2)
按照自左向右的顺序逐个字符比较(比较字符的ASCII值),直到遇到第一个不同的字符或者 '\0' 结束。
结果 > 0 字符串1 > 字符串2
结果 < 0 字符串1 < 字符串2
结果 = 0 字符串1 = 字符串2
1 char array1[] = "lanou";
char array2[] = "keji";
printf("%d\n", strcmp(array1, array2));
char array[] = "iPhone";
printf("%lu\n", sizeof(array));
练习:将字符串 倒转
例如:“afjnpue”转变成字符串“eupnjfa”
(注:是改变 字符串本身,不是 反向输出)
char array[] = "afjnpue";
int length = (int)strlen(array);
for (int i = ; i < length / ; i++) { int temp = array[i];
array[i] = array[length - - i];
array[length - - i] = temp; }
printf("%s\n", array);
4、宏定义
无参的宏
#define 宏名称 定义的值
宏命名: 1.k+驼峰命名法 2.字母全部大写
#define kPrint printf("Hello World!\n")
#define COUNT 10
有参的宏
#define MUL(A, B) ((A) * (B))
// 2 * 3
int result = MUL(, );
printf("result = %d\n", result);
//(3 - 1) * (4 + 2)
int result1 = MUL( - , + );
printf("result1 = %d\n", result1);
iOS学习04C语言数组的更多相关文章
- iOS学习06C语言结构体
1.结构体的概述 在C语言中,结构体(struct)指的是一种数据结构,是C语言中构造类型的其中之一. 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高 ...
- C语言基础:数组 分类: iOS学习 c语言基础 2015-06-10 21:40 7人阅读 评论(0) 收藏
数组:是由一组具有相同数据类型的数据组合而来. 数组定义:元素类型修饰符 数组名[数组个数]={元素1,元素2....}; int arr[ 2 ]={1,2}; //正确 int arr[ ...
- C语言基础:二维数组 分类: iOS学习 c语言基础 2015-06-10 21:42 16人阅读 评论(0) 收藏
二维数组和一位数组类似. 定义: 数据类型 数组名[行][列]={{ },{ }....}; 定义时,一维(行)的长度可以省略,但是二维(列)的长度不可以省略.但是访问时,一定使用双下标. 二维数组的 ...
- iOS学习05C语言函数
本次主要是学习和理解函数,函数树状图如下: 1.函数的声明和定义 函数定义的四要素分别为: 返回值类型 :函数的结果值类型,函数不能返回数组. 指定返回类型是void类型说明函数没有返回值. 函数名 ...
- C语言基础总结 分类: iOS学习 c语言基础 2015-06-11 10:08 23人阅读 评论(0) 收藏
//欲练此功必先自宫!!! //第一天:C语言的基础 //进制 //2进制, 10进制, 8进制, 16进制 //注:8进制数前加0, 16进制数前加0x ...
- iOS学习09C语言函数指针
本次主要学习和理解函数指针 1.函数指针 void printValue(int number) { printf("number = %d\n", number); } int ...
- c语言基础:数据类型 分类: iOS学习 c语言基础 2015-06-10 21:43 9人阅读 评论(0) 收藏
C语言基本数据类型大体上分为: 整型 和 浮点型 字节: 计算机中最小的储存单位 1 Byte = 8 bit 整型: int 4 ...
- iOS学习02C语言分支结构
1. BOOL类型 返回值:真:YES 假:NO BOOL数据类型占一个字节的内存空间,占位符为%d. 计算机在识别时,YES就替换成1,NO就替换成0. bool是C语言中的布尔类型,返回值为tr ...
- C语言基础:函数指针 分类: iOS学习 c语言基础 2015-06-10 21:55 15人阅读 评论(0) 收藏
函数指针:指向函数的指针变量. 函数名相当于首地址. 函数指针定义:返回值类型 (*函数指针变量名)(参数类型1,参数类型2,....)=初始值 函数指针类型:返回值类型 (*)(参数类型1,参数 ...
随机推荐
- Android利用Gson解析嵌套多层的Json
参考:http://www.cnblogs.com/jxgxy/p/3677256.html 比如我们要解析一个下面这种的Json: String json = {"a":&quo ...
- Java Web基础——Action+Service +Dao三层的功能划分
1. Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. D ...
- Android Programming: Pushing the Limits -- Chapter 6: Services and Background Tasks
什么时候使用Service 服务类型 开启服务 后台运行 服务通信 附加资源 什么时候使用Service: @.任何与用户界面无关的操作,可移到后台线程,然后由一个Service来控制这个线程. 服务 ...
- C# 面试宝典
1.简述 private. protected. public. internal 修饰符的访问权限. private 私有成员 只有类成员才能访问 protected 保护成员 只有该类及该类的 ...
- 跳出IFrame几种方式
1. <script type="text/javascript"> if (top.location !== self.location) { top.locatio ...
- 64位Ubuntu运行32位程序时报文件不存在(No such file or Directory)的一种解决办法
尝试在64位Ubuntu下面运行32位程序时, 一直说 文件不存在(No such file or directory), 我只想说++. 你tm说个文件格式不正确不就好了? 非得说个文件不存在! 真 ...
- 为什么是 n(n+1)/2 ?
n(n+1)/2是一个数列的元素两两运算后的不重复结果数.如图: 假如数列a = 1,2,3....n.那么该数列内的元素两两相乘,则会构建出上图中的表格,这个表格应该有n x n 个元素. 用程序写 ...
- HP SAN Switch光纖交換機命令行畫zone
有時候我們無法登陸網頁交互界面去操縱交換機,如下提供了命令行方式從交換機劃zone 1.創建別名 alicreate "SummaryDB_N", "211,14; 21 ...
- Python 入门简介(一)
Why Python? 我个人认为去学习一门新的语言其实是不需要理由的,当然如果你硬要我编个理由的话还是很容易的. 容易学 容易用 有人真的在用Python么? 这个问题谁用谁知道. 选择什么开发工具 ...
- phpcms v9中调用栏目及调用多个子栏目中的文章列表
调用一个指定栏目列表: {pc:content action="lists" catid="6" order="id DESC& ...