zoukankan      html  css  js  c++  java
  • 指针知识(三):指针与数组

    数组的概念与指针的概念联系非常解密。其实数组的标识相当于它的第一个元素的地址,如:int a[5],数组名a指向它的第一个元素a[0]的地址。

    有语句如下:

    int  a[5];
    int * p;

    下面的赋值为合法的:

    p = a;

    这里指针p 和a 是等价的,它们有相同的属性,唯一的不同是我们可以给指针p赋其它的数值,而a 总是指向被定义的5个整数组中的第一个。所以,p只是一个普通的指针变量,而与之不同,a 是一个指针常量(constant pointer),数组名的确是一个指针常量。因此虽然前面的赋值表达式是合法的,但下面的不是:

    a = p;

    因为a 是一个数组(指针常量),常量标识不可以被赋其它数值。

    由于变量的特性,以下例子中所有包含指针的表达式都是合法的:

    #include <iostream>

    using namespace std;

    int main()

    {

    int a[5];
    int *p;
    p = a;      //p是a[0]的地址,因a指向a的首地址,即指向a[0],
    *p = 10;    //即a[0]=10
    p++;
    *p = 20;      //a[1]=20
    p = &a[2];
    *p = 30;      //a[2]=30;
    p = a +3;
    *p = 40;      //a[3]=40
    p = a;
    *(p+4) = 50;   //a[4]=50

    for(int n=0; n<5; n++)
    {
    cout<<a[n]<<", ";
    }
    cout<<' ';

    }

     
    输出:10, 20, 30, 40, 50,

    括号[]来指明我们要引用的数组元素的索引(index)。中括号[]也叫位移(offset)操作符,它相当于在指针中的地址上加上括号中的数字。

    例如,下面两个表达式互相等价:

    a[5] = 0; // a [offset of 5] = 0
    *(a+5) = 0; // pointed by (a+5) = 0

    不管a 是一个指针还是一个数组名, 这两个表达式都是合法的。

  • 相关阅读:
    Git Bash主题配置
    vuex里mapState,mapGetters使用详解
    Vue基础汇总实践
    Chrome for Mac键盘快捷键!来自Google Chrome官网!
    Vue中ESlint配置文件.eslintrc文件
    axios的get,post方法
    正则表达式识别标记——包括它之间的标记
    关于如何在微信里面让video不全屏播放
    javascript执行机制
    防止表单多次提交方法之二
  • 原文地址:https://www.cnblogs.com/guozqzzu/p/3592405.html
Copyright © 2011-2022 走看看