c++学习一:指针基础

1、指针优势,当数据量比较大时,通过指针直接访问数据量所在内存。处理更
  加复杂的数据结构。例如:链表、二叉树、图等。
2、指针本质是一种表示内存地址的数据类型,它和整型int和浮点数float一样
  只是指针表示是内存地址。
3、c++中两种途径可以访问内存。
  i:通过变量名间接访问。为了保存数据,通常先定义保存数据的变量,在
  通过变量名间接访问在内存中的数据,进行读写。
 ii:另一种就是直接通过内存地址,也就是通过指针来访问内存中的数据。
4、语法格式:数据类型* 变量名;
  其中,“数据类型”表示指针所指向的数据是何种数据类型。可以是int、
  string、double等基本数据类型,也可以是自定义的结构体等复杂的数据
  类型。通常数据类型也称指针的类型。
  实际上这两种用法都是合乎c++语法的:
   int* pn;//把int*看成一种数据类型,强调pn为这种数据类型的一个变量
      int *pn;//*pn看作整体,表示它的数据类型是整数,而pn是指向这个整数的指针
  声明多个变量时:
   int* p,p1;//可能出错。p是指针,p1是整数
   int *p,p1;//这个就清楚一些。*p是一个整数,p是指向这个整数的指针
  一般我们都是很规范的一行定义一变量。
5、指针的赋值和使用
  得到一个指针变量后,变量的值还是一个随机的值。这个值可能在内存中
  无关紧要,也可能是重要数据和代码,如果直接使用很危险,所以在使用
  指针之前,必须对其赋值:指针变量 = 内存地址;
6、内存运算符:&和*
     &:取地址运算符;
  如:int n=100;
          int* pn=&n;
  *:指针运算符、解析运算符。与&相反,取得指针所指的内容,无论是数据或者程序代码
  如:*pn=100;
          cout<<*pn<<endl;
  特别的:如果指针指向结构体类型的变量,则可以直接用“->”运算符访问结构体变量的成员。
  如:Emplyee Wang;
       Emplyee* pWang = &wang;
       pWang->m_strName = "*Wang";
     两个指针可以指向相同的位置,如:
    int a;
       int* pa = &a;
       int* pb = pa;//使用一个已经存在的指针对另外一个指针赋值

最后来个例子总结下:
例:
#include
int main(void)
{
    int a = 10;
    int *b = &a;
    printf("a=%p ",&a);
    printf("b=%p ",b);
    printf("b=%d ",*b);
    return 0;
}
结果:a=0xbf989238;b=0xbf989238;b=10
这里我们又可以学到新的东西就是: 
  i、指针类型数据并不等同于任何数据类型
 ii、用“%d”、“%o”、“%x”及“%u”这几种格式输出指针类型的值是错误的未定义行为
iii、应该用“%p”转换格式输出指针类型的值
    如:printf("%p,%d ",a,*a);
备注:输出变量地址就是%p;

原文地址:https://www.cnblogs.com/samewang/p/4774183.html