zoukankan      html  css  js  c++  java
  • C++ 之 指针详解篇(一)

      C++的指针太重要了,我们有必要去掌握它。所以必须认真的对待指针。先来讲解什么是指针。(重点掌握)

      指针是存储内存地址的变量,内存又是什么?内存是干啥用的?简单的说,就是存储一些二进制数据,它是按一定的顺序存储的线性单元结构。那一个数据又是如何存储在内存的呢?这些问题都是汇编的基础知识,如果你学过汇编理解这真的不是难事。闲话越扯越远了,通常数据的存储在内存地址中,不同的计算机它的地址也会不同。假设我们存储了一个变量是整形的,系统会自动的分配一个内存地址给它,要获取内存地址,可以用&运算符。结合示例演示

    #include <iostream>
    using namespace std;
    int main()
    {
        int i;
        long j;
       bool t;
        i = 5;
        j = 100L;
        t = true;
        cout <<"i = "<<i<<", &i = "<<&i<<endl;
        cout<<"j = "<<j<<", &j ="<<&j<<endl;
        cout<<"t ="<<t<<", &t = "<<&t<<endl;
        return 0;
    }
    输出结果为:

    i = 5, &i = 0012FF7C
    j = 100, &j =0012FF78
    t =1, &t = 0012FF70

    这里的i,j,t的地址用&运算符就可以得到。

      每个变量都有地址,我们不知道变量的具体地址,这个时候可以用指针来存储就很方便,当我们需要访问变量的地址的时候,一个指针就轻松的帮我们解决问题。那如果定义一个指针呢?

      很简单假如我们存储变量是整形的

      int *p;

      先来理解这句话的含义:p是一个int类型的指针,p也就可以存储一个变量的地址如上所示

      p = &i;

      我们就用p存储了i的地址,是不是很方便啊,现在我们已经清楚的知道如何定义一个指针,就是在这个变量前加一个*号.

      我们只知道如何定义一个指针,如何使用指针?那如何去获取指针上的值呢?

      *p = i;

      刚才p指针指向了i的地址,那*p就是i地址上的值,我们可以上机实验就可以得知。我们知道用指针获取变量i上的值这是间接的访问了变量i

    *号就是间接的访问了变量i *号具体含义就是存储变量地址上的值

      我们不能用

      p = i; //不能将一个变量(i)赋给一个地址(p)

      学好指针一定用弄清楚指针的地址,指针上的值。结合示例

    using namespace std;
    int main()
    {
        int a;
        int* p;
        a = 5;
        p = &a;
        cout<<"*p = "<<*p<<endl;
        *p = 7;
        cout <<"*p = "<<*p<<" , a = "<<a<<endl;
        a = 0;
        cout<<"a = "<<a<<" *p= "<<*p<<endl;
        return 0;
    }
    输出结果:
    *p = 5
    *p = 7 , a = 7
    a = 0 *p= 0  

    从上得出结论当*p被改变的时候,a的值也会改变。当a的值发生改变,*p也会发生改变。也就说明*能改变一个变量地址上的值。
      那指针能定义一个数组类型的吗?答案当然是可以的。其实在c++中,数组名就是一个常量指针,指向了数组的第一个元素。

    结合示例演示 数组和指针的关系

    #include <iostream>
    using namespace std;
    int main()
    {
        int i[5] = {1,2,3,4,5};
        const int* p = i;
        for (int j = 0; j< 5;j++)
        {
            cout<<"i["<<j<<"] = "<<p[j]<<endl;
        }
        return 0;
    }
    输出结果

    i[0] = 1
    i[1] = 2
    i[2] = 3
    i[3] = 4
    i[4] = 5

      我们用指针p访问了数组i,而数组i的地址就是第一个元素的地址,我们可以用p[j]或者用*(p+j)访问后面的元素,2者的输出结果一样。

  • 相关阅读:
    JZOJ 3845. 简单题(simple)
    JZOJ 3844. 统计损失(count)
    JZOJ 3843. 寻找羔羊(agnus)
    JZOJ 3833. 平坦的折线
    JZOJ 1956. 矩形
    JZOJ 3832. 在哪里建酿酒厂
    mysql 语法一 :case when详解
    阿里云推荐码
    redis配置文件详解(转)
    压力测试工具 webbench总结
  • 原文地址:https://www.cnblogs.com/delphi2014/p/4018772.html
Copyright © 2011-2022 走看看