zoukankan      html  css  js  c++  java
  • 黑马程序员--C语言基础之--数组、指针的基础知识

    ------IOS培训期待与您交流! -------

    一、数组:

    1、基本概念:数组是相同类型的(有序)数据集合,有序数组的特征是:(1)下标是连续的;(2)存储地址也是连续的

    这里要解释一下数组中会出现的几个名词:

    (1)数组名:标示符,代表这个数组

    (2)数组下标:系统自动分配给数组的一个编号(0开始)

    (3)数组的长度:数组存储元素的个数

    2、数组的定义

    (1)定义的格式:

     类型  数组名[常量表达式];

    其中,常量表达式可以为:1)数字    2)返回数字的整数   3)变量(C99不支持,但是LLVM支持)

    int arrp[10]; //定义一个int类型的数组,长度为10,数组名是arr

    注意:

    a.数组名不能和变量名同名

    b.数组在定义的时候可以和定义其他变量混合定义  int a,b,c[10];

    3、数组的初始化和引用方法

    (1)初始化的方法:数组初始化的方式有一下两大种:

     第一种是在定义的时候进行初始化的操作

     1)完全初始化

    int a[5]={1,2,3,4,5};

     2)部分初始化

         

    int a[5]={1,2,3};

    3)指定位置元素的初始化

           

     int a[5]={[2]=4,[4]=2};

    4) 定义的同时初始化,但是不指定长度

          

    int a[]={1,2,34,55,67,67};    //系统会根据赋值的内容来确定数组的长度

    第二种是先定义数组,然后在进行初始化

        

    int a[5];      //定义一个长度为5的int型数组

    //通过下标来初始化,显式的对每一个元素初始化
    a[0]=1;
    a[1]=100;
    a[2]=150;
    a[3]=45;
    a[4]=200;

    访问的方法:对数组的访问是使用数组的下标来进行访问的,因为下标从0开始,访问数组的时候,如一个数组的长度为n ,下标的范围 0-n-1,绝对不能越界访问。

      

            

    int a[n];     //a[n] 这是错误的,最多能访问到 a[n-1]

    越界:就是约错了对象(访问了我们不应该访问的空间),其他语言中约见都会报错,但是现在用的C99的标准,是不报错的。

    4、数组的存储原理

    (1)数组在内存中是一片连续的内存存储空间,数组名指向数组的首地址

    (2)数组中每个元素的地址是连续的

    (3)每个元素在存储数据的时候,低位存在低地址字节,高位存在高地址字节

    (4)数组名是用来存放数组的首地址的。

    简而言之:数组名  == &a[0] == 数组的首地址

    如何计算数组的长度呢?这里我们需要用到一个sizeof字符,具体实现: 数组的长度 = sizeof(数组名)/sizeof(数组元素的类型)

    5、数组作为函数的参数

    1)数组的元素作为函数的参数

    数组的每个元素可以用 a[i] 来表示,a[i] 相当于是一个变量,相当于把a[i]值赋值一份,传递给函数的形参,即数组的元素作为函数参数就是值传递。

    2)数组名作为函数的参数

    数组名作为函数的参数,就不一样了,数组名是一个地址。

    函数的形参和我们数组的名称都指向的是同一块内存空间,所以函数中对数组的操作,就等同于直接操作我们的数组。

    二、指针

    1、指针的基本概念

    计算机给我们的内存若干个存储单元,每个单元都有唯一地址,每个单元都可以存储内容,而地址是唯一的,获取地址的方法“&变量名”,地址所对应的存储单元是可变的,

    地址就是指针。

    2、指针与变量

    指针变量:用来存放地址(指针)的这个变量就是指针变量(指针变量只能存放地址)

    注意:

    (1)指针是一个地址,是常量

    (2)指针变量是一个变量(现在可以存放这个地址,下次可以存放其他地址)

    格式:数据类型 * 指针变量名

    int *p;      //定义了一个指向int类型变量的指针变量,变量名p

    指针定义完成以后,不过不初始化里面存放的是一个垃圾值,这个时候,我称这个指针为野指针

    int i =3,j=6,k;   //&i = 2000
    
    k = i+j;
    
    int *i_pointer = &i;  //存谁的地址,就相当于指向谁
    
    // i_pointer --->i

     注意“*”两个使用场合

    (1)在定义指针变量的时候使用    int *变量名    表示这个变量是一个指针变量

    (2)*指针变量名  表示取得指针变量指向的那片存储单元的内容

      关于指针变量的注意事项:

      1)什么类型的指针变量,只能指向同种类型的变量

      2)指针变量可以是全局,也可以是局部

    3、指针变量的初始化方法

    1)定义的同时进行初始化

       

    int a=10;
    
    int *p = &a;

     2)先定义后初始化

    int a=10;
    
    int *p;
    
    int *q;
    
    p=&a;
    
    q
    =&a;

     3)如果不确定指针指向什么内容

        

    p = NULL;
  • 相关阅读:
    PHP:第一章——PHP中字符运算符、比较运算符、错误控制运算符
    PHP:第一章——PHP中逻辑运算符的使用方法
    PHP:第一章——PHP中的算术运算符/递增、递减运算符/赋值运算符
    微信小程序通过js动态修改css样式的方法(交流QQ群:604788754)
    微信小程序跨页面获取数据示例
    JavaEE资源
    java 学习路线
    想以编程为职业,现在正在看毕向东的java基础,接下来应该看什么视频,求前辈们指教。
    2017Java学习路线图,内附完整Java自学视频教程+工具经验+面试
    各种 学习路线图专区
  • 原文地址:https://www.cnblogs.com/waterfox/p/4367558.html
Copyright © 2011-2022 走看看