zoukankan      html  css  js  c++  java
  • C++指针学习

      比如有天你说你要学习C++,要借我的这本 C++ Primer Plus,我把书给你送过去发现你已经跑出去打篮球了,于是我把书放在了你桌子上书架的第三层四号的位置。并写了一张纸条:你要的书在第 三 层 四号的书架上。贴在你门上。当你回来时,看到这张纸条,你就知道了我借与你的书放在哪了。你想想看,这张纸条的作用,纸条本身不是书,它上面也没有放着书。那么你又如何知道书的位置呢?因为纸条上写着书的位置嘛!聪明!!!其实这张纸条就是一个指针了。它上面的内容不是书本身,而是书的地址,你通过纸条这个指针找到了我借给你的这本书。

    最简单的指针使用   
    #include <iostream> #include <stdlib.h> using namespace std; int main() { int i = 30; std::cout << "&i = "<< &i << std::endl; std::cout << "i = " << i << std::endl; int *pi = NULL; //初始为空 表明该指针不指向一个可访问的内存位置 pi = &i;//把 i 地址的编号赋值给 pi 。指针变量所存的内容就是内存的地址编号  std::cout << "*pi = " << *pi << std::endl; return 0; }
    结果如下

    &i = 0x7ffeb3485828
    i = 30
    *pi = 30

    指针算法运算
    #include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中第一个元素的地址 ptr = var; // 不需要加取地址符 for (int i = 0; i < MAX; i++) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 移动到下一个位置 ptr++; } return 0; }

    Address of var[0] = 0xbfce42d0
    Value of var[0] = 10
    Address of var[1] = 0xbfce42d4
    Value of var[1] = 100
    Address of var[2] = 0xbfce42d8
    Value of var[2] = 200
     
    传递指针给函数    总体上可以理解成全局变量  因为传的是地址, 修改之后在另一个函数内也变化
    #include <iostream> #include <ctime> using namespace std; void get(unsigned long *par); int main () { unsigned long sec = 10; get( &sec ); cout << "sec: " << sec << endl; return 0; } void get(unsigned long *par) { *par = *par * *par; return; }

    sec: 100
    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    // 要生成和返回随机数的函数
    int * getRandom( ) //返回指针
    {
      static int  r[10];
      // 设置种子
      srand( (unsigned)time( NULL ) );
      for (int i = 0; i < 10; ++i)
      {
        r[i] = i;
        cout << r[i] << endl;
      }
      return r;
    }
    // 要调用上面定义函数的主函数
    int main ()
    {
       // 一个指向整数的指针
       int *p;
       p = getRandom();
       for ( int i = 0; i < 10; i++ )
       {
           cout << "*(p + " << i << ") : ";
           cout << *(p + i) << endl;
       }
       return 0;
    }
  • 相关阅读:
    unomi漏洞复现
    xxl-job漏洞复现
    cgi漏洞复现
    celery漏洞复现
    bash漏洞复现
    学习ASP.NET的一些学习资源
    用EF DataBase First做一个简单的MVC3报名页面
    怎样在Word中插入代码并保持代码原始样式不变
    安装notepad++之后怎样在鼠标右键上加上Edit with notepad++
    安装Visual Studio 2010之后怎样安装MSDN Library
  • 原文地址:https://www.cnblogs.com/a719525932/p/11266665.html
Copyright © 2011-2022 走看看