黑马程序员—IOS基础之C语言—数组与指针
2015-07-22 01:52
344 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
一、一维数组
1、一维数组的定义
2、一维数组的初始化
初始化就是给定义的变量赋值。
初始化的方法
3、一维数组的一些问题
二、二维数组
1、二位数组的定义
2、二维数组的初始化
3、二维数组中的一些问题
一、基本指针
1、指针变量的定义
2、指针变量的初始化和引用
指针的一些问题
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
第一章 数组
一、一维数组
1、一维数组的定义
(1)数组:相同类型的若干个数组组成一个有序的集合 (2)一维数组: 数组的每个元素都是基本数据类型的变量 数组的每个元素都不是一个数组 (3)一维数组的定义 数组类型 数组名[数组长度] (4)一维数组的定义的注意事项:
#include <stdio.h> #define M 4 int main(int argc, const char * argv[]) { //注意事项 //(1)数组的长度是可以是一个常量 也可以是常量表达式 int b1[1+1]; //3+3是常量表达式 //(2)数组名的命名规则:严格按照标识符的命名规范 //(3)数组名不能和其他变量同名 int b2; //这是一个整型变量 int b2[4];//定义了一个整型数组,和整型变量同名了 //(4)数组的长度不可以为一个变量 int len =4; int b3[len]; //这是我们xcode编译器做的优化放到c++编译器就报错 //(5)数组的长度可以使用 宏定义 int b4[M]; //M是一个宏定义 //(6)定义数组的时候,还可以定义普通变量 int m,n,b5[4]; //定义两个整形变量 m,n,又定义了一个长度为4 数组名为a7的数组 return 0; }
2、一维数组的初始化
初始化就是给定义的变量赋值。
初始化的方法
// 1)定义的同时进行初始化 // 格式: // 数据类型 数组名[长度]={值1,值2,...}; // (1)定义的同时完全初始化 //定义了一个长度为3的数组,数组名是b,给数组的每一个元素进行赋值 int b[3]={1,2,3}; //定义个一个数组,数组名是b1,数组的长度根据后面大括号中赋值的个数来决定的(此处大括号中有3个值,所以数组长度是3) int b1[]={233,45,6}; (2)定义的同时进行部分初始化 //定义了一个长度为3的数组,数组名是b2,给数组的元素进行赋值 //第一种方法 int b2[3]={6,8}; //第二种方法:定义一个长度为10的数组,数组名是b3, //[4] 表示下标为4的元素赋初值1 //[6] 表示下标为6的元素赋初值2 int b3[8]={[4]=1,[6]=2}; // 2)先定义数组,然后在初始化 int b4[4]; //定义了一个数组 //通过下标法进行初始化,数组长度是4 //下标是数组的元素的编号 // 0 1 2 3 //依次赋值 a4[0] = 1; a4[1] = 3; a4[2] = 5; a4[3] = 7;
3、一维数组的一些问题
一维数组的初始值的问题: (1)若未进行初始化,那么一维数组中存放的是垃圾值 (2)若只进行了部分初始化,那么其他数组元素的值为0 (3)使用先定义后初始化的方式,如果部分数组元素被初始化了,系统不会对没有初始化的那部分元素进行赋值0的操作 一维数组的访问: 数组的引用(访问):数组名[下标] 就可以访问数组的元素 数组的地址问题: 数组名是一个常量 存储的就是数组的首地址,数组名代表了数组的首地址也是数组的第一个元素的地址 一维数组长度计算: 运用sizeof函数计算
二、二维数组
1、二位数组的定义
二维数组: 可以看做是一个特殊的一维数组 ,这个一维数组的每个元素又是一个一维数组 二维数组的定义 数据类型 数组名[第一维的长度(行)][第二维的长度(列)]; int a[2][3]; 理解方法: 1)这是一个特殊的一维数组,一维数组有两个元素 a[0] a[1] a[0] 它又存放了一个长度为3的一维数组 2)定义了一个2行3列的一个矩阵
#include <stdio.h> #define M 3 int main(int argc, const char * argv[]) { //定义一个二维数组 int a[2][3]; //注意事项数组名不能和变量名同名 int b; int b[2][3]; //数组的长度可以是常量表达式 int c[2][1+3]; //注意这种写法,其他的编译器可能不支持,xcode特有的 int m=3,n =3; int arr[m] ; //数组长度 4000 可以使用宏定义 int arr2[3+M][2]; return 0; }
2、二维数组的初始化
//二维数组的初始化 //1)定义的同时初始化 //(1)完全初始化 int a1[2]={1,2}; //1、特殊的一维数组,第一维有2个元素 int a[2][3]={{12,23,45},{1,2,3}}; //分段 //2、连续赋值 int a[2][3]={1,2,3,4,5,6}; //3、可以省略第一维 //int a[3][3] int a[][3]={{1,2,3},{3,4,5},{3,4,5}}; //int a[4][2] int a[][2]={1,2,3,4,5,6,7,8}; //(2)部分初始化 //一般情况下我们用于给数组初始化为0 int a[3][4]={1}; int a[3][4]={{1},{2},{3}}; //注意:这种写法第一维长度可以省略 int a[3][4]={1,2,3,4,5}; //2)先定义,后初始化 int a[3][4]; //第一维下标:0 1 2 //第二维下标:0 1 2 3 a[0][0] = 1;
3、二维数组中的一些问题
二维数组的遍历 二维数组的遍历通过数组下标来访问。 二维数组的存储细节 int a[3][3] 数组的首地址 = 数组名a = &a[0] = &a[0][0]
第二章 指针
一、基本指针
1、指针变量的定义
(1)指针变量 用来存放地址的变量,就是指针变量 (2)指针的实质 就是地址 (3)指针变量的定义 数据类型 *指针变量名; //定义了一个指针变量,变量名是p //int表示,p只能存放一个int类型的变量的地址 int *p; //定义了一个指针变量,变量名是p1 //p1只能存放一个char类型数变量的地址 char *p1; //警告,这是不对的 int num=10; (4)指针变量定义的注意事项 1)“*” 必须得有,如果没有就相当于定义一个普通变量 2)指针变量能用来存放数值或者字符之类的吗? 不能 3)指针变量,归根结底还是变量,也有全局和局部变量之分
2、指针变量的初始化和引用
(1)指针变量也是变量 指针变量的使用: 定义指针变量 ----> 初始化指针变量 ---> 使用(使用指针变量间接的存取内存单元的值)。 (2)指针变量如果不初始化会有什么后果? 结论:如果一个指针变量定义以后,如果不进行初始化,这个指针变量存放的事一个垃圾数,这个指针变量,称之为野指针。 一定要避免操作野指针,因为可能会带来意向不到的错误值是一垃圾值,有可能存放是系统程序的地址,可能会造成系统崩溃。 (3)"*" 的两种用法 1) 用于定义一个指针变量 2) 存储指针变量指向的存储空间的内容
//指针变量如何进行初始化,指针变量应该用地址初始化 //1、定义的同时进行初始化 // 1)完全初始化 //用a的地址初始化 p这个指针变量 //另外一种描述方法:p指向了a int *p = &a; //p1 p2都指向了a int *p1 = &a,*p2 = &a; // 2)部分初始化 //定义了两个指针变量 p3 p4 int *p3 = &b,*p4; p4 = &b; //2)先定义后初始化 int *p7; //空指针 p7 = NULL; //3)如果定义了一个指针变量,但是我不知道让这个指针指向谁 //NULL 是空(0) int *p5 = NULL; //空 int *p6 = 0;
指针的一些问题
指针的应用场景: 1)在被函数中可以修改主调函数中的变量的值 2)让函数可以有多个返回值 二级指针: 指针存放的是另外一个指针的地址,一般形式,**p。 指针为什么要区分类型 因为指针存放的是地址,每一种数据类型的占用的内存字节数都不一样,所以要区分类型。
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
相关文章推荐
- 关于指针的一些事情
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#动态调整数组大小的方法
- Lua和C语言的交互详解
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C# Pointer指针应用实例简述
- Ruby简明教程之数组和Hash介绍
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言内存对齐实例详解
- c语言实现的带通配符匹配算法