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;
}
原文地址:https://www.cnblogs.com/a719525932/p/11266665.html