黑马程序员—IOS基础之C语言—数组与指针

来源:互联网 发布:mac qq接受文件没反应 编辑:程序博客网 时间:2024/06/06 08:35

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——

                                    第一章 数组

一、一维数组
1、一维数组的定义

 (1)数组:相同类型的若干个数组组成一个有序的集合 (2)一维数组:  数组的每个元素都是基本数据类型的变量  数组的每个元素都不是一个数组 (3)一维数组的定义  数组类型  数组名[数组长度] (4)一维数组的定义的注意事项: 
#include <stdio.h>#define M 4int 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 3int 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][n];      //数组长度可以使用宏定义    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培训、期待与您交流! ——

0 0
原创粉丝点击